您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – django两个ModelForms在一个模板上具有相同的字段名称

5b51 2022/1/14 8:23:30 python 字数 3690 阅读 556 来源 www.jb51.cc/python

我有两个模型,都有字段“状态”,对它们有不同的含义. class Order(models.Model): ... status = models.PositiveIntegerField(default=0, choices=ORDER_STATUSES) ... class ACS(models.Model): status = models.IntegerF

概述

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>

但是在结果form.status从form_edit.status获取值不正确.我需要解决这个问题,而不更改模型字段的名称,但不知道如何.

form = ACSForm(prefix='acs',instance=data)
form_edit = OrderACSEditForm(prefix='edit',instance=order)

在使用POST数据实例化表单时,请记住使用相同的前缀.

总结

以上是编程之家为你收集整理的python – django两个ModelForms在一个模板上具有相同的字段名称全部内容,希望文章能够帮你解决python – django两个ModelForms在一个模板上具有相同的字段名称所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶