Django在单个模板中互连的两个表单

Django在单个模板中互连的两个表单,django,Django,我有另一个模型,如下所示 class Status(models.Model): name = models.ForeignKey(User, on_delete=models.CASCADE) status = models.BooleanField(default=False) 我只想创建一个表单,它将呈现来自djangoUsermodel的所有用户,并连接上层模型。单击单个状态按钮时,它将只保存该字段。我正在使用CreateView。怎么做 用户1 用户2 用户3 您

我有另一个模型,如下所示

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


用户1
用户2
用户3
您可以从Django使用。通过这种方式,您可以在一个表单中设置两个表单,从两个表单中获取字段,并使用单个按钮保存它们

例如,在models.py文件中有两个由外键限定的模型:

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

class MyModelB(models.Model):
    field1 = ...
    field2 = models.ForeignKey(MyModelA, ...)
然后,在您的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)
<form method="post" action="" novalidate>
     {% csrf_token %}
     {{ form }}
     {{ my_form }}   
     <input type="submit" class="btn btn-default" value="{% trans 'Save' %}" />
</form>
最后,在template.html文件中,您可以调用您的表单集:

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

{%csrf_令牌%}
{{form}}
{{我的表格}
希望它能帮助您设置可以从Django使用的Django表单集。通过这种方式,您可以在一个表单中设置两个表单,从两个表单中获取字段,并使用单个按钮保存它们

例如,在models.py文件中有两个由外键限定的模型:

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

class MyModelB(models.Model):
    field1 = ...
    field2 = models.ForeignKey(MyModelA, ...)
然后,在您的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)
<form method="post" action="" novalidate>
     {% csrf_token %}
     {{ form }}
     {{ my_form }}   
     <input type="submit" class="btn btn-default" value="{% trans 'Save' %}" />
</form>
最后,在template.html文件中,您可以调用您的表单集:

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

{%csrf_令牌%}
{{form}}
{{我的表格}

希望它能帮助你设置Django表单集

你看了吗?你看了吗?谢谢兄弟。我已经试过了。有没有办法通过循环自动从外键设置用户?和额外的字段将动态总用户行数?谢谢兄弟。我已经试过了。有没有办法通过循环自动从外键设置用户?和额外的字段将动态总用户行数?