Django Admin:如何用oneToOne关系中的两个模型显示list_display的字段值?

sni*_*nja 10 django admin one-to-one models

我相信我的问题的答案很简单,但我无法在任何地方找到它.这是我的困境.我有两个模型:Member和MemberDetail,它们是oneToOne关系,如下所示:

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)
Run Code Online (Sandbox Code Playgroud)

现在在我的admin.py中,我想要显示包含所有数据的成员表,如下所示:

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)
Run Code Online (Sandbox Code Playgroud)

我根本不知道怎么写list_display的"date_of_birth","email"和"phone"部分.我能做的最接近的事情是在内联后添加:

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
Run Code Online (Sandbox Code Playgroud)

但是字段在页面上显示为空.解决办法是什么?谢谢.

sni*_*nja 18

最后!!!我解决了 我认为它很简单,但我必须以其他方式执行并使用多表继承:

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)
Run Code Online (Sandbox Code Playgroud)

现在为admin.py

admin.py
class MemberDetailAdmin(admin.ModelAdmin):
    list_display = ("FIRST_NAME", "LAST_NAME", "DATE_OF_BIRTH", "EMAIL", "PHONE")

admin.site.register(MemberDetail, MemberDetailAdmin)
Run Code Online (Sandbox Code Playgroud)

而已.也许,还有其他解决方案,但这对我有好处.