5

何度も何度も発明するのではなく、クリスピーフォームとブートストラップを採用し、それらの機能を可能な限り使用しようとしています。

django-adminフォームのようにcrispy-forms/bootstrapでインラインフォーム機能を使用する方法はありますか?

次に例を示します。

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)

それはまともなフォームを表示します:

クリスピーフォームでレンダリングされた単一フォームの例

基本的にこのモデルを表すフォームを追加するにはどうすればよいですか。

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で行われるのと同じです。下の画面では、「Question」オブジェクトのデータを入力でき、その下では、QuestionOptionオブジェクトのデータを追加できます。「+」アイコンをクリックして、必要な数のQuestionOptionを追加できます。

モデルからフォームを自動生成する方法を探していません(これは素晴らしいですが、最も重要ではありません)-django-adminのようにデータの「行」を追加できるフォームを作成する方法はありますか? ?

django-adminのスクリーンショット

4

2 に答える 2

6

あなたが参照するインラインフォームは、DjangoではFormsetsとして知られています。フォームセットについて詳しく知りたい場合は、Djangoフォームのドキュメントで見つけることができます。

Crispyは、「フォームセットのレンダリング」のセクションで説明されているように、インラインフォームセットのレンダリングをサポートしています。

フォームセットにはデフォルトで3つの追加のインラインフォームが表示され、さらに3つのオブジェクトを追加できることに注意してください。保存すると、さらに3つのインラインフォームセットが追加されます。

Django Adminのように「さらに追加」ボタンが必要な場合は、Javascriptを使用してこれらの行を動的に追加する必要があります。

于 2012-11-13T11:02:18.963 に答える
0

クラスベースのビューを使用する場合は、django-extra-viewsを使用できます。

于 2012-11-03T22:58:06.107 に答える