Django: list_display() 外键

Posted

技术标签:

【中文标题】Django: list_display() 外键【英文标题】:Django: list_display( ) ForeignKey 【发布时间】:2016-01-10 00:20:55 【问题描述】:

现在我可以在使用 Click_Data 模型时使用 list_display( ) 来显示列 wordclick_times。代码如下:

# models.py
class Click_Data(models.Model):
    word = models.CharField(max_length=255)
    click_times = models.IntegerField(default=0)

    class Meta:
        ordering = ('word',)

    def __unicode__(self):
        return self.word  

# admin.py
    class Click_DataAdmin(admin.ModelAdmin):
        fieldsets = [
            ('Word',    'fields': ['word']),
            ('Number',  'fields': ['click_times']),
        ]
        list_display = ('word', 'click_times')

但我不知道如何在使用 User_Data 模型(其中如下)。

# models.py
class User_Data(models.Model):
    user = models.ForeignKey(User)
    click_data = models.ForeignKey(Click_Data)

    class Meta:
        ordering = ('user',)

    def __unicode__(self):
        return unicode(self.user)

# admin.py
class User_DataAdmin(admin.ModelAdmin):
    fieldsets = [
        ('User',    'fields': ['user']),
        ('Word',    'fields': ['click_data']),
    ]
    list_display = ('user', 'click_data')

我不仅要显示'click_data' 中的'word',还要显示'click_times',我该如何实现呢?

【问题讨论】:

您希望将它们作为表格中的两个单独的列,还是仅将它们放在一个列中,例如“: ”? 可能是重复的帖子,***.com/questions/163823/… @DanielRoseman 我希望将它们作为两个单独的列。你能教我吗? 【参考方案1】:

试试这个:

class User_DataAdmin(admin.ModelAdmin):
    ...
    list_display = (..., 'get_click_times', 'get_word')

    def get_click_times(self, obj):
        return obj.click_data.click_times

    get_click_times.short_description = 'Click Times'

    def get_word(self, obj):
        return obj.click_data.word

    get_word.short_description = 'Word'

【讨论】:

以上是关于Django: list_display() 外键的主要内容,如果未能解决你的问题,请参考以下文章

更改列表页面上的 django admin 附加字段

django admin编辑被外键关联的主表时支持显示字表记录

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

Django:list_display ManyToManyField 排序

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

如何在 Django admin 中本地化 list_display 字段?