Django两种形式在单个模板中互连

时间:2018-10-23 00:03:17

标签: django

我还有另一个类似下面的模型

Call me @ (123)123-1234

我只想创建一个表单,该表单将呈现django class Status(models.Model): name = models.ForeignKey(User, on_delete=models.CASCADE) status = models.BooleanField(default=False) 模型中连接了上层模型的所有用户。当单击单个状态按钮时,它将仅保存该字段。我正在使用CreateView。该怎么做?

User

1 个答案:

答案 0 :(得分:2)

您可以使用Django的Formsets。通过这种方式,您可以将两个表单合二为一,从两个表单中获取字段,然后用一个按钮保存它们。

例如,您在 models.py 文件中有两个由ForeignKey限制的模型:

class MyModelA(models.Model):
    field1 = ...
    field2 = ...

class MyModelB(models.Model):
    field1 = ...
    field2 = models.ForeignKey(MyModelA, ...)

然后,在{strong> forms.py 文件中,由于formsets,您必须将这两种形式都绑定在一起:

from django.forms.models import inlineformset_factory
from .models import MyModelA, MyModelB

MyFormSet = inlineformset_factory(MyModelA, MyModelB, form=MyModelBForm, extra=1, max_num=1)

通过这一行,您的模型将在模板中设置为相同的django形式。

现在,在您的 views.py 文件中,您必须调用表单集:

class MyClassCreateView(CreateView):
    model = MyModelA
    template_name = 'path/to/your/template'

    def get_context_data(self, **kwargs):
        context = super(MyClassCreateView, self).get_context_data(**kwargs)
        context['my_form'] = MyFormSet(self.request.POST or None)
        return context

    def form_valid(self, form):
        context = self.get_context_data()
        document = context['my_form']
        if document.is_valid():
            self.object = form.save()
            document.instance = self.object
            document.save()
        return super(MyClassCreateView, self).form_valid(form)

最后,在您的 template.html 文件中,您可以调用表单集:

<form method="post" action="" novalidate>
     {% csrf_token %}
     {{ form }}
     {{ my_form }}   
     <input type="submit" class="btn btn-default" value="{% trans 'Save' %}" />
</form>

希望它可以帮助您设置Django表单集