关于Django:Django – 在admin list_display函数中包含来自foreignkey的数据

Django - Include data from foreignkey in admin list_display function

有一双模型和管理模型。

1
2
3
4
5
6
7
8
9
10
11
12
13
class Person(models.Model):

    firstname = models.CharField(maxlength=50)
    surname = models.CharField(maxlength=50)

class Friends(models.Model):

    person1 = models.ForeignKey("Person")
    person2 = models.ForeignKey("Person")
    friendship_made = models.DateField()

class PersonAdmin(admin.ModelAdmin):
    list_display = ["firstname","surname"]

我想给朋友的人的_显示的列表。我知道如果仇恨的外键字段的Person模型中可以使用的两个双underscore如person2__surname参考信息。但我不确定怎么做当苏氨酸对外的关键是在其他表。

在我的系统中,一个人可以只与一个人的朋友,一小时,所以它会更好如果外键是模型的人,但我想两个额外的信息(如友谊的约会方式(它是友谊的方式_)所以这是为什么我已经把它在一个单独的模型。任何建议吗?如果我有两个相变模型得到最好的结果,我不介意。


您需要在FriendAdmin类中创建类似的内容:

1
2
3
4
5
6
class UserAdmin(admin.ModelAdmin):
    list_display = (..., 'get_reviews')

    def get_reviews(self, obj):
        return obj.book.review
    get_reviews.short_description = 'Review'


谢谢你的回答uvasal(它非常有用),但是这个代码有无效的语法

您需要:返回"%s"(obj.book.review,)或返回"%s"%obj.book.review


这段代码不完整-您有两个foreignkey,从FriendsPerson,因此其中至少一个需要related_name属性来防止冲突。代码根本无法按原样运行。

如果一个人只能和另一个人成为朋友,你应该使用OneToOneField,而不是ForeignKey。那么,您可以简单地引用my_person.friend1.person1.surname,其中my_person是您开始使用的人,friend1是我上面提到的related_name值。