Django Admin: Comment faire pour afficher la valeur de champs avec list_display à partir de deux modèles qui sont en relation oneToOne?
Je pense que la réponse à mon problème est simple, mais je ne peux pas le trouver n'importe où. Voici ma situation. J'ai deux modèles: Membre et MemberDetail, qui sont en relation oneToOne comme ceci:
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)
Maintenant dans mon admin.py je veux afficher la table membre avec toutes ses données, comme ceci:
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)
Simplement, je ne sais pas comment écrire "date_of_birth", "email" et "téléphone" partie de list_display. La chose la plus proche que je puisse faire est de l'ajout de cette après 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
mais les champs ont montré vide sur la page. Quelle est la solution? Merci.
OriginalL'auteur sninja | 2013-01-14
Vous devez vous connecter pour publier un commentaire.
Enfin!!!!! Je l'ai résolu. Comme je pensais que c'était simple, mais j'ai dû le faire en sens inverse et avec multi héritage de table:
Maintenant pour admin.py
Que c'est. Peut-être, il y a d'autres solutions, mais c'est bon pour moi.
OriginalL'auteur sninja
Vous devez juste être capable de faire
'member_detail__email'
, etc. danslist_display
Puisque c'est un 1-1, vous devriez avoir un backref, et des domaines connexes, sont référencées à l'aide de deux traits de soulignement.
quelles sont les options que vous obtenez? Habituellement, il vous donne une liste.
Une autre impasse. Dit trop de valeurs pour obtenir ou quelque chose comme ça. J'aime bien ton idée avec backref, mais n'ont tout simplement pas comment l'écrire. Je veux une solution pour être élégant, par exemple: Membre__MemberDetail__e-MAIL. Mais si on "erreur" et si c'est à l'intérieur "d'erreur". Peut-être que je suis absent quelque chose. Le point est que le Membre n'est pas inscrit MemberDetail. Il n'sur admin ajouter un formulaire ou un changement de forme. Mais dans list_display je ne peux pas afficher ces champs à partir de MemberDetail.
"trop de valeurs"...? Je voulais dire, quand il vous a donné le "pas un callable ou un attribut" erreur, il va généralement pour dire que "les champs disponibles sont <une liste de champs>" N'avait-il le faire?
Désolé pour missunderstanding. Mais non, aucun message de ce type.
OriginalL'auteur Colleen