2012-11-03 13 views
5

मैं क्रिस्पी-फॉर्म और बूटस्ट्रैप को अपनाने की कोशिश कर रहा हूं और कुछ बार बार-बार आविष्कार करने की बजाय अपनी कार्यक्षमता जितनी संभव हो उतनी उपयोग कर रहा हूं।django crispy-form इनलाइन फॉर्म

क्या डिज़ागो-एडमिन फॉर्मों जैसे क्रिस्पी-फॉर्म/बूटस्ट्रैप के साथ इनलाइन फॉर्म कार्यक्षमता रखने का कोई तरीका है?

example of single form rendered with crispy-forms

कैसे मैं एक रूप है कि मूल रूप से इस मॉडल का प्रतिनिधित्व करता है जोड़ने के बारे में जाना है::

class Link(models.Model): 
    name = models.CharField(max_length=255, blank=False, null=False, verbose_name=_(u'Название')) 
    url = models.URLField(blank=False, null=False, verbose_name=_(u'Ссылка')) 
    project = models.ForeignKey('Project') 

class NewProjectForm(forms.Form): 
    name = forms.CharField(required=True, label=_(u'Название проекта'), widget=forms.TextInput(attrs={'class':'input-block-level'})) 
    group = forms.ModelChoiceField(required=False, queryset=Group.objects.all(), label=_(u'Группа проектов'), widget=forms.Select(attrs={'class':'input-block-level'})) 
    description = forms.CharField(required=False, label=_(u'Описание проекта'), widget=forms.Textarea(attrs={'class':'input-block-level'})) 

    class Meta: 
     model = Project 
     fields = ('name','description','group') 

    def __init__(self, *args, **kwargs): 
     self.helper = FormHelper() 
     self.helper.form_class = 'horizontal-form' 
     self.helper.form_action = 'submit_new_project' 
     self.helper.layout = Layout(
      Field('name', css_class='input-block-level'), 
      Field('group', css_class='input-block-level'), 
      Field('description',css_class='input-block-level'), 
     ) 
     self.helper.add_input(Submit('submit',_(u'Создать проект'))) 
     self.helper.add_input(Submit('cancel',_(u'Я передумал'))) 
     super(NewProjectForm, self).__init__(*args, **kwargs) 

यह एक सभ्य रूप को प्रदर्शित करेगा:

यहाँ एक उदाहरण है

तो एक परियोजना और नाम/यूआरएल लिंक और विज्ञापन के लिए एक तरीका होगा डी कई, जैसे ही django-admin में किया जाता है, जहां आप अपने मुख्य मॉडल से संबंधित डेटा के साथ अतिरिक्त 'पंक्तियां' जोड़ सकते हैं। नीचे दिए गए स्रीनशॉट पर आप 'प्रश्न' ऑब्जेक्ट के लिए डेटा भरने में सक्षम हैं और नीचे आप प्रश्नावली ऑब्जेक्ट्स के लिए डेटा जोड़ सकते हैं- आप जितना चाहें उतने प्रश्नपत्र जोड़ने के लिए '+' आइकन पर क्लिक करने में सक्षम हैं।

मैं मॉडलों से स्वत: जेनरेट किए गए फॉर्म प्राप्त करने का कोई तरीका नहीं ढूंढ रहा हूं (यह अच्छा है लेकिन सबसे महत्वपूर्ण नहीं है) - क्या ऐसा फॉर्म बनाने का एक तरीका है जो आपको डेटा की 'पंक्ति' जोड़ने देगा django-admin करता है?

screenshot of django-admin

उत्तर

6

इनलाइन रूपों का संदर्भ आप Django में फॉर्मसेट के रूप में जानते हैं। यदि आप फ़ॉर्मेट्स के बारे में और जानना चाहते हैं, तो आप उन्हें the Django forms documentation में पा सकते हैं।

खस्ता इनलाइन formsets प्रतिपादन का समर्थन करता है, के रूप में the section 'Rendering Formsets'

में वर्णित कृपया ध्यान दें कि डिफ़ॉल्ट शो 3 अतिरिक्त इनलाइन रूपों के द्वारा formsets, आप तीन अधिक वस्तुओं को जोड़ने के लिए अनुमति देता है। सहेजने के बाद, आपको फिर से जोड़ने के लिए तीन अतिरिक्त इनलाइन फॉर्मेट प्राप्त होते हैं।

यदि आप Django व्यवस्थापक में 'अधिक जोड़ें' बटन चाहते हैं, तो आपको उन पंक्तियों को गतिशील रूप से जोड़ने के लिए कुछ जावास्क्रिप्ट का उपयोग करने की आवश्यकता होगी।

+0

यह प्रश्न गतिशील 'अधिक जोड़ें' बटनों के बारे में अधिक जानकारी में जाता है: http://stackoverflow.com/questions/501719/dynamically-adding-a-form-to-a-django-formset-with-ajax – publysher

0

वर्ग आधारित विचारों का उपयोग कर, आप django-extra-views उपयोग कर सकते हैं।

संबंधित मुद्दे