Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django一个模板上具有相同字段名的两个ModelForms_Python_Django_Django Models_Django Forms_Django Templates - Fatal编程技术网

Python django一个模板上具有相同字段名的两个ModelForms

Python django一个模板上具有相同字段名的两个ModelForms,python,django,django-models,django-forms,django-templates,Python,Django,Django Models,Django Forms,Django Templates,我有两个模型,两个模型都有字段“status”,对它们有不同的含义 class Order(models.Model): ... status = models.PositiveIntegerField(default=0, choices=ORDER_STATUSES) ... class ACS(models.Model): status = models.IntegerField(default=-1, choices=STATUSES) orde

我有两个模型,两个模型都有字段“status”,对它们有不同的含义

class Order(models.Model):
    ...
    status = models.PositiveIntegerField(default=0, choices=ORDER_STATUSES)
    ...

class ACS(models.Model):
    status = models.IntegerField(default=-1, choices=STATUSES)
    order = models.ForeignKey(Order, blank=True, null=True)
    ...
其形式如下所示:

class ACSForm(forms.ModelForm):
    status = forms.ChoiceField(
        choices=STATUSES,
        widget=forms.Select(attrs={'class': 'form-control'})
    )
    ...

    class Meta:
       model = ACS
       fields = ('status',)

class OrderACSEditForm(forms.ModelForm):
    status = forms.ChoiceField(
        choices=ORDER_STATUSES,
        widget=forms.Select(attrs={'class': 'form-control'})
    )

    class Meta:
        model = Order
        fields = ('status',)
我想在同一页上编辑这两个字段。我的view.py看起来像

def edit(request, item_id=""):
    data = ACS.objects.get(pk=item_id)
    form = ACSForm(instance=data)
    order = Order.objects.get(id=data.order.id)
    form_edit = OrderACSEditForm(instance=order)
    if request.POST:
        form = ACSForm(request.POST, instance=data)
        form_edit = OrderACSEditForm(request.POST)
        if form.is_valid() and form_edit.is_valid():
            form_edit.save()
            obj = form.save()
            messages.add_message(request, messages.SUCCESS, 'Your data successfully saved.')

        if request.POST['action'] == "save_stay":
            return redirect("/panel/packages/acs/edit/" + str(obj.id))
        else:
            return redirect("/panel/packages/acs/")
    return render(request, 'ui/packages/acs/edit.html', dict(data=data, form=form, form_edit=form_edit, item_id=item_id))
模板

<div class="form-group {% if form.status.errors %}has-error{% endif %}">
    <label>{% trans "Status" %}</label>
        {% if form.status.errors %}
            {% for error in form.status.errors %}
                <label class="control-label">{{ error }}</label>
            {% endfor %}
        {% endif %}
        {{ form.status }}
</div>

<div class="form-group {% if form_edit.status.errors %}has-error{% endif %}">
    <label>{% trans "Order status" %}</label>
        {% if form_edit.status.errors %}
            {% for error in form_edit.status.errors %}
                <label class="control-label">{{ error }}</label>
            {% endfor %}
        {% endif %}
        {{ form_edit.status }}
</div>

{%trans“状态”%}
{%if form.status.errors%}
{form.status.errors%中的错误为%1}
{{error}}
{%endfor%}
{%endif%}
{{form.status}
{%trans“订单状态”%}
{%if form_edit.status.errors%}
{%for表单_edit.status.errors%中的错误}
{{error}}
{%endfor%}
{%endif%}
{{form_edit.status}
但是在result form.status中,从form_edit.status获取的值不正确。我需要在不更改模型字段名称的情况下解决此问题,但不知道如何解决。

使用表单的参数来命名字段名称

form = ACSForm(prefix='acs', instance=data)
form_edit = OrderACSEditForm(prefix='edit', instance=order)
记住在用POST数据实例化表单时也要使用相同的前缀