首页 > 解决方案 > Django ModelForm - 防止保存在视图中

问题描述

我正在尝试使用 ModelForm 来保存模型。

表格.py

class PurchaseForm(forms.ModelForm):

    weight = forms.IntegerField()

    class Meta:
        model = Purchase
        fields = ["number", "pieces"]

视图.py

if request.method == "POST":
    form = PurchaseForm(request.POST)
    if form.is_valid():
        purchase = form.save(commit=False)
        purchase.contract = Contract.objects.get(number=slug)
        weight = form.cleaned_data.get('weight')
        if check_weight(weight, purchase.contract):
            weight_type = purchase.contract.supplier.market.weights
            purchase.lbs, purchase.kgs = generate_weights(weight, weight_type)
            purchase.save()

check_weight在上面的视图中,如果函数返回,我需要阻止模型保存False。此函数需要来自相关对象的一些数据。我很难弄清楚这一点。我应该怎么办?

标签: djangodjango-formsdjango-views

解决方案


如果我正确理解了您的问题,这将起作用,

from django.http import HttpResponse


def my_form_view(request):
    if request.method == "POST":
        form = PurchaseForm(request.POST)
        if form.is_valid():
            purchase = form.save(commit=False)
            purchase.contract = Contract.objects.get(number=slug)
            weight = form.cleaned_data.get('weight')
            if check_weight(weight, purchase.contract):
                weight_type = purchase.contract.supplier.market.weights
                purchase.lbs, purchase.kgs = generate_weights(weight, weight_type)
                purchase.save()
                return HttpResponse("save success")
            return HttpResponse("'check_weight' returned False")
    else:  # if a GET (or any other method) we'll create a blank form
        form = PurchaseForm()
    return render(request, 'some_html_template.html', {'form': form})

推荐阅读