Django管理:如何从两款车型,其在oneToOne关系显示与list_display领域的价值?

2019-08-06 21:10发布

我相信,答案我的问题很简单,但我不能在任何地方找到它。 这是我的困境。 我有两个模式:会员和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)

现在在我的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)

我根本不知道怎么写“DATE_OF_BIRTH”,“电子邮件”和list_display的“手机”的一部分。 我可以做的最接近的是内联后添加此:

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

但字段显示网页上的空白。 解决办法是什么? 谢谢。

Answer 1:

最后!!! 我解决了它。 因为我认为这很简单,但我不得不周围,多表继承做另一种方式:

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

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

admin.site.register(MemberDetail, MemberDetailAdmin)

而已。 也许,还有其他的解决方案,但是这是为我好。



Answer 2:

你应该能够做到'member_detail__email'等在list_display

因为它是一个1-1,你应该有一个backref和相关领域使用两个下划线引用。



文章来源: Django Admin: How to display value of fields with list_display from two models which are in oneToOne relation?