Django: 将模型字段添加到list_display并为每个条目显示相关值

0 投票
2 回答
1222 浏览
提问于 2025-04-16 22:04

我有以下的模型定义,见下文。

models.py:

class Userstatus(models.Model):
    label = models.CharField(...)
    description = models.CharField(...)


class Foo(models.Model):
    title = models.CharField(...)
    visibility = models.ManyToManyField(Userstatus)

admin.py:

class FooAdmin(ModelAdmin):
    list_display = ('id', 'title', )

admin.site.register(Foo, FooAdmin)

在“Foo”的管理列表视图中,通过FooAdmin,list_display列表应该包含Userstatus中的“label”,这样每个label就会显示成一列。我可以创建一个方法来生成这个list_display的列表。

但是,这样的话实际上没有任何属性或可调用的内容可以让我根据可见性(多对多字段)为每个label列返回一个布尔值。

我有哪些选择?我应该尝试拦截对Foo的可调用或属性请求,并动态生成一个布尔结果吗?(频繁访问数据库或让列可排序是另一个问题,但先解决最重要的事情)。

2 个回答

0

你确定要把用户状态做成一个数据库表,而不是仅仅用一个包含几个状态的“选择”元组吗?

1

Django 文档上说...

ManyToManyField 字段不被支持,因为这意味着每一行数据都需要执行一个单独的 SQL 语句。如果你还是想这样做,可以给你的模型添加一个自定义的方法,并把这个方法的名字加到 list_display 中。(下面会有更多关于在 list_display 中使用自定义方法的信息。)

撰写回答