Py学习  »  Django

将值从视图传递到窗体-Django

Femme Fatale • 4 年前 • 917 次点击  

我有一个视图,在其中呈现两个窗体。这两个表单都与更新付款(SIM U表单)和附加付款表单(付款U表单)相关。正如您从代码中看到的,我通过获取sim_表单的ID来填充表单。我希望在模型付款中保存相同的SIM表ID,该模型付款中有一个SIM外键。但是我无法传递该值,并且表单给出了一个验证错误,即sim_id的值为空。

身份证来了,我也能用。

模型

class Payment(models.Model):
    deposit_date = models.DateField(blank=True, verbose_name='Deposit Date')
    file = models.FileField(upload_to=get_file_path)
    sim = models.ForeignKey(Sim, on_delete=models.DO_NOTHING, null=False, blank=False)

视图

def updatePayment(request, id):
    sim  = get_object_or_404(Sim, pk=id)
    payment_form = AddPaymentForm(request.POST, request.FILES)
    if request.method == "POST":
        sim_form = UpdatePayment(request.POST, instance=sim)
        try:
            if  payment_form.is_valid() and sim_form.is_valid:
                sim_form.save()

                # I am trying to form the value from here
                payment_form.sim_id = id
                payment_form.save()
                messages.success(request, ("Payment has been updated"))
            else:
                messages.warning(request, ("Data in fields is incorrect, please try again"))
        except Exception as e:
            messages.warning(request, ("Error: {}".format(e)))
    else:
        sim_form = UpdatePayment(instance=sim)
        payment_form = AddPaymentForm(request.POST)
    context = {'sim_form': sim_form,'payment_form': payment_form,}
    return render(request, 'payment/updatePayment.html', context)
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38875
 
917 次点击  
文章 [ 2 ]  |  最新文章 3 年前
ruddra
Reply   •   1 楼
ruddra    4 年前

首先,删除 sim 字段,因为它在模型表单中不是必需的:

class AddPaymentForm(models.Model):
    class Meta:
       model = Payment
       fields = ('deposit_date', 'file')

然后更新视图以保存 模拟 值如下:

def updatePayment(request, id):
    sim  = get_object_or_404(Sim, pk=id)
    if request.method == "POST":
        payment_form = AddPaymentForm(request.POST, request.FILES)
        sim_form = UpdatePayment(request.POST, instance=sim)
        try:
            if  payment_form.is_valid() and sim_form.is_valid():
                sim_form.save()
                payment = payment_form.save(commit=False)
                payment.sim_id = id
                payment.save()
                messages.success(request, ("Payment has been updated"))
            else:
                messages.warning(request, ("Data in fields is incorrect, please try again"))
        except Exception as e:
            messages.warning(request, ("Error: {}".format(e)))
    else:
        sim_form = UpdatePayment(instance=sim)
        payment_form = AddPaymentForm()
    context = {'sim_form': sim_form,'payment_form': payment_form,}
    return render(request, 'payment/updatePayment.html', context)

这是我用的 payment_form.save(commit=False) 生成 Payment 尚未保存到数据库的对象。然后我分配 sim_id 并使用 .save() 方法。