10

私の問題に対する答えは簡単だと思いますが、どこにも見つかりません。これが私の苦境です。次のような oneToOne 関係にある Member と MemberDetail の 2 つのモデルがあります。

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

しかし、フィールドはページ上で空でした。解決策は何ですか?ありがとう。

4

3 に答える 3

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)

今admin.py

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

admin.site.register(MemberDetail, MemberDetailAdmin)

それでおしまい。たぶん、他の解決策があるかもしれませんが、これは私にとっては良いことです。

于 2013-01-15T21:31:41.640 に答える
-1

'member_detail__email'などを実行できるはずですlist_display

これは 1 対 1 であるため、後方参照が必要であり、関連するフィールドは 2 つのアンダースコアを使用して参照されます。

于 2013-01-14T23:42:02.417 に答える