2013-01-14 92 views
9

मुझे विश्वास है कि मेरी समस्या का उत्तर सरल है, लेकिन मुझे इसे कहीं भी नहीं मिल रहा है। यहाँ मेरी दुर्दशा है। सदस्य और MemberDetail, जो इस तरह oneToOne संबंध में कर रहे हैं::Django व्यवस्थापक: oneToOne संबंध में दो मॉडल से list_display के साथ फ़ील्ड्स का मूल्य कैसे प्रदर्शित करें?

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", "ईमेल" और "फ़ोन" भाग कैसे लिखें। निकटतम बात मैं कर सकता 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 

लेकिन खेतों पृष्ठ पर खाली दिखाया। उपाय क्या है? धन्यवाद।

उत्तर

16

अंत में !!! मैंने इसे हल किया। मैंने सोचा था कि के रूप में यह आसान था, लेकिन मैं इसे दूसरी तरह के आसपास है और बहु ​​तालिका विरासत के साथ करना था:

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) 

यह है कि के लिए

। शायद, अन्य समाधान भी हैं, लेकिन यह मेरे लिए अच्छा है।

0

तुम बस list_display

में 'member_detail__email', आदि करने के लिए सक्षम चूंकि यह एक 1-1 है आप एक backref होना चाहिए, और संबद्ध क्षेत्रों दो अंडरस्कोर का उपयोग कर संदर्भित किया जाना चाहिए।

+4

रीप्ले के लिए धन्यवाद। मैं 'member_detail__email' भाग से उलझन में हूं। मैंने कोशिश की, लेकिन अगर मैंने इसे डाल दिया तो Django त्रुटि रिपोर्ट करता है जो कॉल करने योग्य या 'सदस्य एडमिन' की विशेषता नहीं है या मॉडल 'सदस्य' में पाया गया है। मुझे कुछ कोड मिला जो समाधान की तरह दिखता है। यह सदस्य.objects.get() की तरह जाता है, लेकिन मुझे नहीं पता कि इसे कैसे पूरा किया जाए। – sninja

+0

आपको कौन से विकल्प मिलते हैं? आमतौर पर यह आपको एक सूची देता है। – Colleen

+0

एक और मृत अंत। प्राप्त करने के लिए बहुत कुछ मूल्य कहता है या ऐसा कुछ। मुझे बैकफ्रफ़ के साथ आपका विचार पसंद है, लेकिन इसे लिखने के लिए इसे प्राप्त न करें। मैं समाधान को सुरुचिपूर्ण बनाना चाहता हूं, उदाहरण के लिए: सदस्य__MemberDetail__EMAIL। लेकिन अगर यह त्रुटि से बाहर है और अगर यह त्रुटि में है। शायद मुझे कुछ याद आ रही है। मुद्दा यह है कि सदस्य सदस्य सदस्यता पंजीकृत नहीं करता है। यह व्यवस्थापक पर फॉर्म या परिवर्तन फार्म जोड़ता है। लेकिन list_display में मैं उन फ़ील्ड को MemberDetail से नहीं दिखा सकता। – sninja