簡體   English   中英

Django管理員說SuspiciousOperation,不允許過濾

[英]Django admin says SuspiciousOperation, filtering not allowed

我的系統中有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。

我意識到自己犯了一個錯誤-此處顯示的代碼經過了簡化,而Message模型實際上是從抽象的Content模型繼承的,所以我需要注釋列表的URL為:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM