2012-11-03 3 views
5

나는 crispy-forms와 bootstrap을 채택하려고 노력하고 있으며, 반복해서 무언가를 발명하는 대신 가능한 한 많은 기능을 사용하려고합니다.django crispy-forms inline forms

django-admin 양식처럼 바삭한 양식/부트 스트랩으로 인라인 양식 기능을 사용할 수 있습니까?

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) 

이 괜찮은 양식을 표시합니다 여기

은 예입니다

프로젝트 및 이름/URL 링크 및 광고 방법이 있습니다. 많은 django-admin에서 똑같은 일이 당신의 주 모델과 관련된 데이터로 여분의 '행'을 추가 할 수 있습니다. 아래의 스크린 샷에서 'Question'객체의 데이터를 채울 수 있으며 아래에서는 QuestionOption 객체에 대한 데이터를 추가 할 수 있습니다. '+'아이콘을 클릭하여 원하는만큼 QuestionOptions를 추가 할 수 있습니다.

모델에서 자동 생성 된 양식을 얻는 방법을 찾고 있지 않습니다. (가장 좋지만 좋지는 않지만) - '데이터'행을 추가 할 수있는 양식을 만드는 방법이 있습니까? django-admin 않습니다?

screenshot of django-admin

답변

6

참조하는 인라인 양식은 Django에서 Formsets로 알려져 있습니다. formsets에 대해 더 알고 싶다면 the Django forms documentation에서 찾을 수 있습니다. 로 the section 'Rendering Formsets'

설명 인라인 formsets 렌더링

바삭 지원, 유의하시기 바랍니다 세 이상의 개체를 추가 할 수 있도록 기본 쇼 3 개 추가 인라인 형태로 formsets. 저장 한 후에는 세 개의 추가 인라인 서식 세트를 사용하여 더 추가 할 수 있습니다.

장고 관리자와 같이 '추가'버튼을 원하면 동적으로 해당 행을 추가해야하는 자바 스크립트가 필요합니다.

+0

이 질문은 동적 인 '추가'버튼에 ​​대해 자세히 설명합니다. http://stackoverflow.com/questions/501719/dynamically-adding-a-form-to-a-django-formset-with-ajax – publysher

0

클래스를 기반으로보기를 사용하여, 당신은 django-extra-views를 사용 할 수 있습니다.