ValidationError:“值必须为十进制数字”

问题描述

我有以下型号:

class Listing(models.Model):
    product = models.CharField(max_length=64)
    description = models.CharField(max_length=200)
    user = models.ForeignKey(User,on_delete=models.CASCADE,related_name="Listings")
    category = models.CharField(max_length=64,blank=True)
    created = models.DateField()
    starting_price = models.DecimalField(max_digits=6,decimal_places=2,default=decimal.Decimal(0))
    current_price = models.DecimalField(max_digits=6,default=starting_price)

在我的views.py中,我使用Django Form类的实例向用户询问输入。 我收到以下错误信息:“““ auctions.Listing.starting_price”值必须是十进制数字。”] 但是,当我在错误页面上检查Local Vars时,可以看到starting_price = Decimal('10.00')

的值

因此很明显拍卖的价值。Listing.starting_price是小数!没有其他条目可能会导致此问题。

我使用的表格如下:

class NewListingForm(forms.Form):
    product = forms.CharField(max_length=64)
    description = forms.CharField(widget=forms.Textarea)
    category = forms.CharField(max_length=64,required=False)
    starting_price = forms.DecimalField(max_digits=6,decimal_places=2)

发布时,我像这样评估数据:

if entry_form.is_valid():
    product = entry_form.cleaned_data["product"]
    description = entry_form.cleaned_data["description"]
    category = entry_form.cleaned_data["category"]
    starting_price = entry_form.cleaned_data["starting_price"]

然后我通过以下方式保存模型条目:

listing = Listing(product=product,description=description,user=user,category=category,created=created,starting_price=starting_price)
listing.save()

我真的很感谢任何想法。

解决方法

问题出在default=starting_price部分:

class Listing(models.Model):
    # …
    current_price = models.DecimalField(
        max_digits=6,decimal_places=2,default=starting_price
    )

解释类本身时,starting_priceDecimalField,因此它将尝试将DecimalField作为 value 分配给另一个{{1} },不是一个DecimalField。由于Decimal接受某些类型的对象,例如字符串,DecimalField等,但不接受Decimal,因此会产生错误。

您只需将值传递到DecimalFieldstarting_price,例如:

current_price