Django Admin:如何使用 list_display 显示来自一对一关系的两个模型的字段值? [英] Django Admin: How to display value of fields with list_display from two models which are in oneToOne relation?
问题描述
我相信我的问题的答案很简单,但我在任何地方都找不到.这是我的困境.我有两个模型:Member 和 MemberDetail,它们是这样的一对一关系:
I belive that the answer to my problem is simple, but I can't find it anywhere. Here is my predicament. I have two models: Member and MemberDetail, which are in oneToOne relation like this:
class Member(models.Model):
ID = models.AutoField(primary_key=True)
FIRST_NAME = models.CharField('First name', max_length=50)
LAST_NAME = models.CharField('Last name', max_length=50)
def __unicode__(self):
return u'%s %s' % (self.FIRST_NAME, self.LAST_NAME)
class MemberDetail(models.Model):
member = models.OneToOneField(Member, primary_key=True)
DATE_OF_BIRTH = models.DateField('Date of birth')
EMAIL = models.EmailField('E-mail')
PHONE = models.CharField('Phone', max_length=15)
现在在我的 admin.py 中,我想显示成员的所有数据的表格,如下所示:
Now in my admin.py I want to show table for member with all of his data, like this:
class MemberDetailInline(admin.TabularInline):
model = MemberDetail
class MemberAdmin(admin.ModelAdmin):
list_display = ("FIRST_NAME", "LAST_NAME", "date_of_birth", "email", "phone")
inlines = [
MemberDetailInline,
]
admin.site.register(Member, MemberAdmin)
我只是不知道如何写 list_display 的date_of_birth"、email"和phone"部分.我能做的最接近的事情是在内联之后添加它:
I simply don't know how to write "date_of_birth", "email" and "phone" part of list_display. The closest thing I could do is adding this after inlines:
def date_of_birth(self, MemberDetail):
return MemberDetail.DATE_OF_BIRTH
def date_of_birth(self, MemberDetail):
return MemberDetail.EMAIL
def date_of_birth(self, MemberDetail):
return MemberDetail.PHONE
但页面上的字段显示为空.解决办法是什么?谢谢.
but the fields showed empty on page. What is the solution? Thanks.
推荐答案
终于!!!我解决了.因为我认为这很简单,但我不得不以其他方式和多表继承来做:
Finally!!! I solved it. As I thought it was simple, but I had to do it other way around and with multi table inheritance:
models.py
class Member(models.Model):
ID = models.AutoField(primary_key=True)
FIRST_NAME = models.CharField('First name', max_length=50)
LAST_NAME = models.CharField('Last name', max_length=50)
# Using multi table inheritance - automaticly creates one to one field
class MemberDetail(Member):
DATE_OF_BIRTH = models.DateField('Date of birth')
EMAIL = models.EmailField('E-mail')
PHONE = models.CharField('Phone', max_length=15)
现在是 admin.py
Now for admin.py
admin.py
class MemberDetailAdmin(admin.ModelAdmin):
list_display = ("FIRST_NAME", "LAST_NAME", "DATE_OF_BIRTH", "EMAIL", "PHONE")
admin.site.register(MemberDetail, MemberDetailAdmin)
就是这样.也许还有其他解决方案,但这对我有好处.
That's it. Maybe, there is other solutions, but this is good for me.
这篇关于Django Admin:如何使用 list_display 显示来自一对一关系的两个模型的字段值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!