Django 管理员 : How to display value of fields with list_display from two models which are in oneToOne relation?

标签 django admin models one-to-one

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

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

我根本不知道如何编写 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

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

最佳答案

终于!!!我解决了。因为我认为这很简单,但我必须以其他方式并使用多表继承来做到这一点:

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)

就是这样。也许还有其他解决方案,但这对我有好处。

关于Django 管理员 : How to display value of fields with list_display from two models which are in oneToOne relation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14328714/

相关文章:

python - 具有不同类型的 Django ArrayField

python - Django 2 - 如何使用电子邮件确认和 CBV 注册用户?

python - xlsxwriter 消耗太多内存并且进程被终止

django - 如何将模型管理员添加到 Django 管理员中的另一个应用程序部分?

python - Django:如何调试这个管理错误?表单未呈现

ios - 如何使用 swift 在 parse.com 中检索模型

ruby-on-rails - rails 4 : organize rails models in sub path without namespacing models?

python - Django-Allauth Facebook 集成 - 请求单独发布到用户墙上的权限

django - 新手。 Django 教程(来自 django 网站)停留在第 2 部分 - 管理员

scala - 运行 stanford LLDA tmt scala 模型时出现线程错误