Встроенные формы django crispy-forms

Я пытаюсь внедрить crispy-forms и bootstrap и использовать как можно больше их функциональных возможностей вместо того, чтобы изобретать что-то снова и снова.

Есть ли способ реализовать функциональность встроенных форм с помощью crispy-forms / bootstrap, как у форм django-admin?

Вот пример:

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)

он будет отображать приличную форму:

пример одной формы, отображаемой с помощью 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')

Таким образом, будет проект и ссылки на имя / URL и способ их добавления, как и в django-admin, где вы можете добавлять дополнительные «строки» с данными, относящимися к вашей основной модели. На снимке экрана ниже вы можете заполнить данные для объекта «Вопрос», а ниже вы можете добавить данные для объектов QuestionOption - вы можете щелкнуть значок «+», чтобы добавить столько параметров QuestionOptions, сколько хотите.

Я не ищу способ автоматически генерировать формы из моделей (это приятно, но не самое важное) - есть ли способ создать форму, которая позволит вам добавлять «строки» данных, как это делает django-admin ?

снимок экрана django-admin


person abolotnov    schedule 03.11.2012    source источник


Ответы (2)


Встроенные формы, на которые вы ссылаетесь, в Django известны как наборы форм. Если вы хотите узнать больше о наборах форм, вы можете найти их в документации по формам Django..

Crispy поддерживает рендеринг встроенных наборов форм, как описано в разделе "Наборы форм для рендеринга"

Обратите внимание, что наборы форм по умолчанию показывают 3 дополнительные встроенные формы, что позволяет добавить еще три объекта. После сохранения вы снова получаете три дополнительных встроенных набора форм, чтобы добавить еще больше.

Если вам нужна кнопка «добавить еще», как в Django Admin, вам нужно будет использовать некоторый Javascript для динамического добавления этих строк.

person publysher    schedule 13.11.2012
comment
В этом вопросе более подробно рассказывается о динамических кнопках «добавить еще»: stackoverflow.com/questions/501719/ - person publysher; 13.11.2012

При использовании представлений на основе классов можно использовать django-extra-views.

person Scott Woodall    schedule 03.11.2012