Django管理员说SuspiciousOperation,不允许过滤

时间:2013-10-02 11:09:16

标签: django django-admin

我的系统中有3个相关模型。每个用户都属于某个特定的地方。用户可以发送消息,评论消息,类似于论坛帖子。

以下是3个型号:

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)

我希望这个结构能够反映在我的AdminModels中。所以对于我的PlaceAdmin我写了这个:

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'

这非常有效,每个地方都链接到该地点过滤的邮件列表。所以我为我的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'

我收到以下错误:

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

我不明白为什么一个人被允许而另一个人不被允许。有任何想法吗?我正在使用Django 1.5。

1 个答案:

答案 0 :(得分:0)

我意识到我犯了一个错误 - 我在这里展示的代码被简化了,Message模型实际上是从一个抽象的Content模型继承而来的,所以我需要注释列表的URL为:

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