Django管理员:如何从两个模型中显示list_display的字段值,这些模型是在OneToOne关系中? [英] Django Admin: How to display value of fields with list_display from two models which are in oneToOne relation?

查看:168
本文介绍了Django管理员:如何从两个模型中显示list_display的字段值,这些模型是在OneToOne关系中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

我根本不知道如何写date_of_birth list_display的电子邮件和电话部分。我可以做的最近的事情是在内联后添加:

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管理员:如何从两个模型中显示list_display的字段值,这些模型是在OneToOne关系中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆