【问题标题】:Django ForeignKey Works for Filter but not List DisplayDjango ForeignKey 适用于过滤器但不适用于列表显示
【发布时间】:2017-02-23 20:49:26
【问题描述】:

我正在尝试在 Admin list_display 中列出 ForeignKey 值。我正在尝试下面的解决方案,这似乎是每个人都使用的解决方案,但我只是收到一个错误'NoneType' object has no attribute 'first_name'

我列出的是否正确?谢谢。

斑块模型

class Plaque(models.Model):
    created_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='plaques', default=1)
    group = models.ForeignKey(Group, blank=True, null=True, verbose_name='Group Name')
    veteran = models.ForeignKey(Veteran, blank=True, null=True)
    ...

模型管理员

class PlaqueAdmin(admin.ModelAdmin):
    list_display = ['id', 'get_veteran', 'last_name', 'first_name', 'branch', 'group', 'draft']

    def get_veteran(self, obj):
        return obj.veteran.first_name

    get_veteran.short_description = 'Veteran'
    ...

【问题讨论】:

    标签: python django django-models django-views django-admin


    【解决方案1】:

    问题根本不在于 id,而在于 get_veteran()。你的一个牌匾没有老手,因此会引发错误。如果没有老手,你应该返回一个空白值(或其他东西):

    def get_veteran(self, obj):
        if obj.veteran is not None:        
            return obj.veteran.first_name
        else:
            return ''
    

    还请注意,您可以遍历 list_display 中的关系 - 我不能 100% 确定,但如果老手为空,它不会引发相同的错误 - 查看文档和我自己的代码以找到类似于你的。

    class PlaqueAdmin(admin.ModelAdmin):
        list_display = ['id', 'veteran__first_name', 'last_name', 'first_name', 'branch', 'group', 'draft']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      • 2019-02-21
      • 2013-04-17
      • 2020-08-05
      • 1970-01-01
      • 2019-06-17
      • 2020-02-06
      相关资源
      最近更新 更多