2013-10-02 4 views
0

J'ai 3 modèles associés dans mon système. Chaque utilisateur appartient à un endroit particulier. Les utilisateurs peuvent envoyer des messages et commenter des messages, un peu comme des fils de discussion.Administrateur Django dit SuspiciousOperation, filtrage non autorisé

Voici les 3 modèles:

class Place(models.Model): 
    name = models.CharField(max_length=50, unique=True) 
    slug = models.SlugField(max_length=50, unique=True) 

class Message(models.Model): 
    creator = models.ForeignKey(User) 
    title = models.CharField(max_length=40) 
    content = models.CharField(max_length=3000) 
    date_created = models.DateTimeField(default=timezone.now) 
    place = models.ForeignKey(Place) 

class Comment(models.Model): 
    creator = models.ForeignKey(User) 
    content = models.CharField(max_length=3000) 
    date_created = models.DateTimeField(default=timezone.now) 
    message = models.ForeignKey(Message) 

Je veux que cette structure se refléter dans mes AdminModels. Donc, pour mon PlaceAdmin j'ai écrit ceci:

class PlaceAdmin(admin.ModelAdmin): 
    list_display = ('name', 'slug', 'list_messages') 

    def list_messages(self, obj): 
     url = reverse('admin:user_content_message_changelist') 
     return '<a href="{0}?place__id__exact={1}">List messages</a>'.format(url, obj.id) 

    list_messages.allow_tags = True 
    list_messages.short_description = 'Messages' 

Cela fonctionne parfaitement, chaque lieu des liens vers une liste de messages filtrés par cet endroit. Donc, je l'ai fait la même chose pour mon MessageAdmin:

class MessageAdmin(admin.ModelAdmin): 
    list_display = ('title', 'list_comments') 

    def list_comments(self, obj): 
     url = reverse('admin:user_content_comment_changelist') 
     return '<a href="{0}?message__id__exact={1}">List comments</a>'.format(url, obj.id) 

    list_comments.allow_tags = True 
    list_comments.short_description = 'Comments' 

Et je reçois l'erreur suivante:

SuspiciousOperation at /admin/user_content/comment/ 
Filtering by message__id__exact not allowed 

Je ne comprends pas pourquoi on est autorisé et l'autre non. Des idées? J'utilise Django 1.5.

Répondre

0

je réalise que je fait une erreur - le code que je montrais ici a été simplifié, et le modèle Message hérite en fait à partir d'un modèle abstrait Content, donc je besoin l'URL de la liste des commentaires comme:

<a href="{0}?message__content_ptr__exact={1}">List comments</a> 
Questions connexes