【问题标题】:Django Admin can't display attributes in a model with multiple Foreign Keys to another modelDjango Admin 无法在具有多个外键的模型中显示另一个模型的属性
【发布时间】:2021-11-26 02:35:44
【问题描述】:

基本上我有两种模型,一种用于图标,另一种用于具有 3 个图标(业务规则)的类型。在我的 models.py 文件中,我有以下内容:

class Icon(models.Model):
    name = models.CharField(max_length=60)
    image_URL = models.CharField(max_length=255)
    modified_date = models.DateTimeField(auto_now=True)
    creation_date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name
class Type(models.Model):
    name = models.CharField(max_length=60)
    modified_date = models.DateTimeField(auto_now=True)
    creation_date = models.DateTimeField(auto_now_add=True)
    icon1 = models.ForeignKey(Icon, null=True, blank=True, on_delete=models.SET_NULL, related_name="icon1")
    icon2 = models.ForeignKey(Icon, null=True, blank=True, on_delete=models.SET_NULL, related_name="icon2")
    icon3 = models.ForeignKey(Icon, null=True, blank=True, on_delete=models.SET_NULL, related_name="icon3")

    def __str__(self):
        return self.name

在我的 admin.py 文件中,我有以下内容:

class TypeAdmin(admin.ModelAdmin):
    list_display = (
        'name',
        'icon1__name',
        'modified_date',
        'creation_date',
        'id'
    )
...

admin.site.register(models.Type, TypeAdmin)

一切正常,但我无法让它显示图标的名称。这适用于具有同一模型的单个外键属性的其他类,但是由于同一模型有三个外键属性,因此出现错误:

: (admin.E108) 'list_display[1]' 的值是指'icon1__name',它不是可调用的,不是'TypeAdmin'的属性,也不是属性或“app.Type”上的方法。

是什么导致了这个错误?我该如何解决? FK 允许为 null(或空白),因为某些类型允许没有图标(不是必需的)。

【问题讨论】:

  • 使用'icon1' 而不使用__nameIcon__str__ 方法无论如何都会返回名称
  • 好的,非常感谢,这已修复并允许我添加所有 3 个图标。我不知道离开它会调用__str__ 方法。谢谢!

标签: django django-models django-rest-framework django-admin django-admin-tools


【解决方案1】:

已解决:感谢Iain 的回答,不应调用属性,仅将其保留为icon1 而不是icon1__name,因为它调用了无论如何都会返回名称的__str__ 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 2020-12-23
    • 1970-01-01
    相关资源
    最近更新 更多