【问题标题】:Django ModelForm - Prevent save in ViewDjango ModelForm - 防止保存在视图中
【发布时间】:2018-07-31 23:39:30
【问题描述】:

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

forms.py

class PurchaseForm(forms.ModelForm):

    weight = forms.IntegerField()

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

views.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,我需要阻止模型保存。 此函数需要来自相关对象的一些数据。我很难弄清楚这一点。我该怎么办?

【问题讨论】:

  • 这里有什么问题?你的代码看起来不错
  • 嗯,当检查重量返回 false 时,我认为它正在保存,但它现在似乎正在工作。我的数据库肯定有其他问题。

标签: django django-forms django-views


【解决方案1】:

如果我正确理解了您的问题,这将有效,

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

【讨论】:

    猜你喜欢
    • 2015-05-24
    • 2016-05-07
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 2015-10-08
    • 2017-06-29
    • 2014-01-14
    • 2012-07-23
    相关资源
    最近更新 更多