Django Admin: Как отобразить значение полей с отображением списка из двух моделей, которые находятся в отношении oneToOne?
Я верю, что ответ на мою проблему прост, но я не могу найти его нигде. Вот мое затруднительное положение. У меня есть две модели: Member и MemberDetail, которые находятся в одном отношении, как это:
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. Самое близкое, что я мог бы сделать, это добавить это после 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
но поля показывались пустыми на странице. Каково решение? Спасибо.
2 ответов
наконец-то!!! Я решил ее. Как я думал, это было просто, но я должен был сделать это по-другому и с наследованием нескольких таблиц:
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)
вот именно. Может быть, есть другие решения, но это хорошо для меня.
вы просто должны быть в состоянии сделать 'member_detail__email'
, etc. в list_display
поскольку это 1-1, у вас должен быть backref, а связанные поля ссылаются с помощью двух подчеркиваний.