如何在Django中使用“ add_fields”?

时间:2018-07-09 07:49:33

标签: django formset

我正在阅读Django文档,发现了add_fields方法。

文档说:

  

“如果您需要向表单集中添加其他字段,则可以   轻松完成。 formset基类提供一个add_fields   方法。”

我想使用它,但是没有示例或说明 它可以在视图和模板中使用。你能给我一点吗 使用这种方法的例子?

1 个答案:

答案 0 :(得分:0)

我将举一个小例子。 models.py看起来像这样,

from django.db import models


class Article(models.Model):
    title = models.CharField(max_length=100)
    pub_date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

forms.py看起来像这样,

from django import forms
from django.forms import BaseFormSet
from .models import Article


class ArticleForm(forms.ModelForm):

    class Meta:
        model = Article
        fields = ['title']


class BaseArticleFormSet(BaseFormSet):

    def add_fields(self, form, index):
        super().add_fields(form, index)
        form.fields['body'] = forms.CharField()

views.py看起来像这样,

from django.shortcuts import render
from django.forms import formset_factory

from .forms import ArticleForm, BaseArticleFormSet

def home(request):
    ArticleFormSet = formset_factory(ArticleForm, formset=BaseArticleFormSet, extra=3)
    context = dict()
    formset = ArticleFormSet()

    if request.method == 'POST':
        formset = ArticleFormSet(request.POST)

        if formset.is_valid():
            print(formset.cleaned_data)

    context['formset'] = formset

    return render(request, 'home.html', context)

最后,home.html看起来像这样,

<form method="post">
    {% csrf_token %}
    <table>
        {{ formset }}
    </table>
    <button type="submit">submit</button>
</form>

This is the resulting output

如您所见,正文字段出现在模板中,但未包含在“文章”模型中。

希望有帮助!