相关内联上的python django list_display [重复]

Posted

技术标签:

【中文标题】相关内联上的python django list_display [重复]【英文标题】:python django list_display on related inlines [duplicate] 【发布时间】:2012-09-09 10:35:38 【问题描述】:

可能重复:Can “list_display” in a Django ModelAdmin display attributes of ForeignKey fields?

我想在来自另一个相关模型的模型的管理列表视图中显示一些信息。

class Identity(models.Model):
  blocked = models.BooleanField()
  ...

class Person(models.Model):
  modelARef = OneToOneField("Identity", primary_key=True)
  descr     = models.CharField(max_length=255)
  name      = models.CharField(max_length=255)

用户应该能够在管理页面上添加/编辑“Person”。由于不支持反向内联,我必须在管理页面上显示“身份”,然后内联“人员”。 “身份”仅包含“人员”的附加信息,这些信息应在管理页面上可见。

现在,当我有一个“身份”管理页面时,如何在“身份”的 list_display 上显示“人员”模型中的字段?

问候

编辑:我可以向“Identity”添加一些函数来查询相关的“Person”并返回所需的值,但如果我这样做,就不可能对该列进行排序。

【问题讨论】:

【参考方案1】:

您可以使用list_display 添加自定义列。我还建议更新get_queryset() 以确保仅在一个查询中获取相关对象,而不是导致每行查询。

class IdentityAdmin(admin.ModelAdmin):
    list_display = ('blocked', 'person_name')

    def person_name(self, object):
        return object.person.name

    person_name.short_description = _("Person name")

    def get_queryset(self, request):
        # Prefetch related objects
        return super(IdentityAdmin, self).get_queryset(request).select_related('person')

【讨论】:

看来更新查询集的函数应该是get_queryset而不是queryset per docs.djangoproject.com/en/2.0/ref/contrib/admin/…【参考方案2】:

不是直接的,但是你可以创建一个打印出你想要的内容的方法,并将方法名称添加到 list_display 中。见docs on list_display

【讨论】:

是的,我可以创建一个打印出我想要的内容的方法,但列将无法排序(正如我在帖子中所写的那样)

以上是关于相关内联上的python django list_display [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Django:如何在 list_display 中包含内联模型字段?

何时在 Python 中内联元类的定义?

Python/Django 避免保存内联

格式化 django admin 中呈现的内联多对多相关模型

python测试开发django-23.admin列表页优化和排序

django 内联表单集的单选按钮