【问题标题】:How can I check User Input value again Django Models and Forms如何再次检查用户输入值 Django 模型和表单
【发布时间】:2021-08-04 18:05:46
【问题描述】:

我不知道如何实际编写逻辑,但我想检查用户输入,尤其是针对产品模型(价格属性)的价格表单字段。

我已经对 django 表单进行了如下建模:

class SalesForm(forms.ModelForm):
class Meta:
    model = Sales
    fields = ['product', 'customer', 'quantity', 'price']

这是产品模型

class Product(models.Model):
name = models.CharField(max_length=100, null=True)
category = models.CharField(max_length=100, choices=CATEGORY, null=True)
cost = models.PositiveIntegerField(null=True)
price = models.PositiveIntegerField(null=True)
quantity = models.PositiveIntegerField(null=True)

这是我在views.py中逻辑上尝试做的事情

def user_add_sales(request):

sales = Sales.objects.all().order_by('-salesdate')[:5]
if request.method == 'POST':
    sales_form = SalesForm(request.POST)
    if sales_form.is_valid:
        sales_price = sales_form.cleaned_data('price')
        try:
            user_input = Product.objects.get(price = sales_price)
            sales_form.save()
            messages.success(request, 'Sales Added Successfully')
            return redirect('dashboard-user-sales')
        except user_input.DoesNotExist:
            sales_form = SalesForm()
else:
    sales_form = SalesForm()
context = {
   'sales' : sales,
   'sales_form' : sales_form,
}
return render(request, 'dashboard/user_sales.html', context)

尝试运行代码时,显示“SalesForm”对象没有“cleaned_data”属性。有人应该帮助我如何检查用户在 SalesForm 的价格字段中输入的内容是否不低于在 Product Model 中为该产品设置的价格。

【问题讨论】:

    标签: python django


    【解决方案1】:

    表单通过sales_form.is_valid()方法进行验证,而不是通过属性验证,if 条件如下:

    if sales_form.is_valid():
        # …
    # …

    在您的表单中,您可以检查给定价格是否至少是相关属性中的价格:

    class SalesForm(forms.ModelForm):
        # …
        
        def clean(self, *args, **kwargs):
            data = super().clean(*args, **kwargs)
            if data['price'] < data['product'].price:
                raise ValidationError('The price of the sale is below the price of the product')
            return data

    【讨论】:

    • 感谢您的回答,但这里想要实现的是检查价格字段中输入的值是否不小于产品模型价格属性中设置的值
    • 你能分享你的SalesForm吗?
    • SaleForm 代码是我问题中的第一个代码。看看上面的代码。谢谢
    • @apollos:您可以通过覆盖clean 方法来检查这一点。
    • class SalesForm(forms.ModelForm): class Meta: model = Sales fields = ['product', 'customer', 'quantity', 'price']
    猜你喜欢
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多