我可以在 Django Admin 中显示二级以上的相关字段吗?

Can I display second level up related fields in Django Admin?

假设我有一个如下所示的三层模型,其中 posts 在类别中,然后在类别中。我想让管理面板中的帖子页面显示每个 post 所属的子类别和类别。理想情况下,让我同时过滤两者。到目前为止,我只能让管理面板建立一个关系级别。所以我可以按 sub_category 显示和过滤,但是当我添加类别时出现错误。

models.py:

class Category(models.Model):
    name=models.CharField(max_length=10)
    def __str__(self):
         return self.name

class Subcategory(models.Model):
    category=models.ForeignKey(Category,on_delete=models.CASCADE,null=True)
    name=models.CharField(max_length=10)
    def __str__(self):
         return self.name

class Posts(models.Model):
     title=models.CharField(max_length=15)
     sub_category=models.ForeignKey(Subcategory,on_delete=models.CASCADE,null=True)
     def __str__(self): 
         return self.title

Admin.py:

class PostsAdmin(admin.ModelAdmin):
    ordering = ('name',)
    list_display = ('name','id','sub_category', 'sub_category__category.name', )
    exclude = ('sort',)
    list_filter = ['sub_category','sub_category__category']
    search_fields = ['name']
admin.site.register(Posts, PostsAdmin)

错误是这样的:

<class 'journal.admin.PostsAdmin'>: (admin.E108) The value of 'list_display[4]' refers to 'sub_category__category', which is not a callable, an attribute of 'PostsAdmin', or an attribute or method on 'journal.Admin'.

您需要在管理员 class 上添加一个方法,returns 每个 post 的类别然后在 list_display

中引用它
class PostsAdmin(admin.ModelAdmin):
    list_display = ('name','id','sub_category', 'category')

    def category(self, obj):
        return obj.sub_category.category.name

您也可以将此方法添加到 post 模型而不是模型管理员