【问题标题】:How to see how many relations a Django model has in admin?如何查看 Django 模型在管理员中有多少关系?
【发布时间】:2014-03-15 20:39:26
【问题描述】:

我想在 Django admin 中显示一个对象有多少个关系。

假设我有以下模型:

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')


class Choice(models.Model):
    question = models.ForeignKey(Question)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

我想在投票问题旁边的管理员 (list_display) 中显示可供选择的数量。有没有办法向 Question 类添加一个函数,该函数将返回它有多少个选择?

编辑

这是一个假设模型。我正在使用带有文件存储的模型,并想计算有多少文件连接到“主”模型,或者在本例中为 Question 类。

【问题讨论】:

  • 你可以试试count = Question.choice_set.count() 吗?
  • @anishshah 我添加的代码是一个假设模型,在我的情况下,Choice 类实际上是一个文件存储模型,我想计算有多少文件链接到“问题”模型。所以choice_set 在这里不起作用。

标签: python django foreign-keys admin database-relations


【解决方案1】:

list_display 选项允许您指定 ModelAdmin 本身的函数以显示为列。你甚至不需要在你的 Question 模型上定义那个函数,如果你只需要你的 ModelAdmin 的话。

来自docs of list_display

class PersonAdmin(admin.ModelAdmin):
    list_display = ('upper_case_name',)

    def upper_case_name(self, obj):
        return ("%s %s" % (obj.first_name, obj.last_name)).upper()
    upper_case_name.short_description = 'Name'

list_display 属性中指定的函数将使用单个参数调用:正在显示的对象。您可以在反向关系上使用RelatedManager.count 获取其相关实例的计数:

return obj.choice_set.count()

【讨论】:

  • 我了解list_display 这部分的工作原理。然而,OP 中的主要问题是如何计算模型具有的关系数。
  • 抱歉,我未能正确理解文档和您的答案。我现在了解模型能够查看与obj.(modelname in lowercase)_set.count() 的关系。我接受了你的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-19
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 2021-12-11
  • 1970-01-01
  • 2018-07-23
相关资源
最近更新 更多