2013-03-13 6 views
8

में टैब्यूलरइनलाइन फॉर्मेट में डिफ़ॉल्ट मान कैसे सेट करें django admin की इनलाइन में पहली डिफ़ॉल्ट पंक्ति/मान कैसे सेट करें?Django admin

class Employee(models.Model): 
     username = models.CharField(_('Username'), max_length=150, null=False, blank=False) 
     email = models.CharField(_('Email'), max_length=150, null=False, blank=False) 

    class Details(models.Model): 
     employee = models.ForeignKey(Employee, verbose_name=_('Employee'), blank=False, null=False) 
     label = models.CharField(_('Label'), max_length=150, null=False, blank=False) 
     value = models.CharField(_('Value'), max_length=150, null=False, blank=False) 


    class DetailsFormset(forms.models.BaseInlineFormSet): 
     def __init__(self, *args, **kwargs): 
       self.initial = [ 
{ 'label': 'first name'}, 
{'label': 'last name'}, 
{'label': 'job',}] 
      super(DetailsFormset, self).__init__(*args, **kwargs) 

    class DetailsInline(admin.TabularInline): 
     model = Details 
     formset = DetailsFormset 
     fieldsets = [ 
       ['', {'fields': ['employee', 'label', 'value']}] 
     ] 

    class EmployeeAdmin(admin.ModelAdmin): 
     inlines = [DetailsInline] 

लेकिन इस पंक्ति से काम नहीं करता

self.initial = [ 
{ 'label': 'first name'}, 
{'label': 'last name'}, 
{'label': 'job',}] 

मैं कैसे Django व्यवस्थापक का उपयोग कर डिफ़ॉल्ट मान सेट करूँ?

+0

परिभाषित करता है कि 'काम नहीं करता'। इसका परिणाम क्या है ? – Raptor

+0

मैं चाहता था कि पहली डिफ़ॉल्ट पंक्तियां प्रथम नाम, अंतिम नाम और नौकरी के रूप में हों, लेकिन यह किसी भी डिफ़ॉल्ट मान को परिभाषित नहीं कर सकता है – jargalan

उत्तर

9
from django.utils.functional import curry 

class DetailsInline(admin.TabularInline): 
    model = Details 
    formset = DetailsFormset 
    extra = 3 

    def get_formset(self, request, obj=None, **kwargs): 
     initial = [] 
     if request.method == "GET": 
      initial.append({ 
       'label': 'first name', 
      }) 
     formset = super(DetailsInline, self).get_formset(request, obj, **kwargs) 
     formset.__init__ = curry(formset.__init__, initial=initial) 
     return formset 

यहाँ से: Pre-populate an inline FormSet?

+0

मैं चाहता था कि पहली डिफ़ॉल्ट पंक्तियां पहले नाम, अंतिम नाम और नौकरी के रूप में हों, लेकिन यह हमेशा एक ही मान – jargalan

+0

हाँ सेट करता है, मैं डिफ़ॉल्ट रूप से तीन इनलाइन पंक्तियों को परिभाषित करने की आवश्यकता है जो स्थिर – jargalan

+0

हैं ठीक है, मैं इसे अपने ऐप में परीक्षण करने का प्रयास करूंगा। अगर मैंने इसे हल किया है, तो मैं अपना उत्तर – catherine

1

क्या आप की जरूरत नए रूपों आप एक InlineFormSet की empty_form संपत्ति को फिर से परिभाषित कर सकते हैं बनाए जाते हैं के लिए डिफ़ॉल्ट मान परिभाषित करने के लिए है, तो:

class MyDefaultFormSet(django.forms.models.BaseInlineFormSet): 
    @property: 
    def empty_form(self): 
     form = super(MyDefaultFormSet, self).empty_form 
     # you can access self.instance to get the model parent object 
     form.fields['label'].initial = 'first name' 
     # ... 
     return form 

class DetailsInline(admin.TabularInline): 
    formset = MyDefaultFormSet 

अब, प्रत्येक बार जब आप एक नया फॉर्म जोड़ते हैं तो इसमें प्रारंभिक डेटा होता है जिसे आपने प्रदान किया था। मैंने django 1.5 पर इसका परीक्षण किया है।