Django ModelForm-防止在视图中保存

Django ModelForm-防止在视图中保存,django,django-forms,django-views,Django,Django Forms,Django Views,我正在尝试使用ModelForm保存模型 forms.py class PurchaseForm(forms.ModelForm): weight = forms.IntegerField() class Meta: model = Purchase fields = ["number", "pieces"] if request.method == "POST": form = PurchaseForm(request.POST)

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

forms.py

class PurchaseForm(forms.ModelForm):

    weight = forms.IntegerField()

    class Meta:
        model = Purchase
        fields = ["number", "pieces"]
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()
视图.py

class PurchaseForm(forms.ModelForm):

    weight = forms.IntegerField()

    class Meta:
        model = Purchase
        fields = ["number", "pieces"]
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\u weight
函数返回
False
,我需要防止模型保存。
此函数需要来自相关对象的一些数据。我搞不清楚这件事。我该怎么办?

如果我正确理解了你的问题,这就行了,

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})
从django.http导入HttpResponse
定义我的表单视图(请求):
如果request.method==“POST”:
表单=采购表单(request.POST)
如果form.is_有效():
购买=表单。保存(提交=False)
purchase.contract=contract.objects.get(number=slug)
权重=表单.数据.获取('weight')
如果检查重量(重量、采购合同):
重量\类型=采购.合同.供应商.市场.重量
purchase.lbs,purchase.kgs=生成重量(重量,重量类型)
purchase.save()
返回HttpResponse(“保存成功”)
返回HttpResponse(“'check_weight'返回False”)
否则:#如果使用GET(或任何其他方法),我们将创建一个空白表单
form=PurchaseForm()

返回render(请求'some_html_template.html',{'form':form})
这里有什么问题?您的代码似乎很好嗯,当check weight返回false时,我认为它是在节省,但它现在似乎正在工作。我的数据库一定是出了什么事。