代码之家  ›  专栏  ›  技术社区  ›  Adam Starrh

Django ModelForm-防止在视图中保存

  •  0
  • Adam Starrh  · 技术社区  · 8 年前

    我正在尝试使用模型窗体保存模型。

    表单.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 . 此函数需要来自相关对象的一些数据。我搞不清楚这件事。我该怎么办?

    1 回复  |  直到 8 年前
        1
  •  1
  •   JPG    8 年前

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

    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})