django项目中的Model和ModelForm定义如下:
class Consumption(models.Model):
date=models.DateTimeField(default=datetime.now)
product_name=models.ForeignKey(Stock,to_field='product_name')
quantity=models.IntegerField()
customer=models.CharField(max_length=50,null=True,blank=True)
def __unicode__(self):
return self.product_name
class ConsumptionForm(ModelForm):
class Meta:
model=Consumption
def clean_quantity(self):
cleaned_data=self.cleaned_data
product=cleaned_data.get("product_name")
quantity=int(cleaned_data.get('quantity'))
stock=Stock.objects.get(product_name=product)
if quantity > stock.quantity:
raise forms.ValidationError("Not enough stock")
return cleaned_data
其中Stock类包含作为消费外键的产品名称,其数量应大于消费数量。
现在问题是当我输入提交给ConsuForm时。它给出了数量字段的错误,因为即使在我提供整数之后,该字段也必须是整数。
这可能是什么原因?
答案 0 :(得分:3)
您将从cleaned_data
方法返回整个clean_quantity
字典,而不仅仅是quantity
的值。
答案 1 :(得分:2)
您不需要将cleaning_data.get('quantity')强制转换为int
。 Django在表单基类上的to_python()方法将为您做到这一点。作为验证过程的一部分,所有表单都会尝试将其值转换为Python值。
我没有在clean_quantity()方法中看到任何会让我认为它不起作用的内容,虽然你没有展示你的Stock
课程,所以我们可以看到什么类型的现场股票。数量是。
我的建议是为此表单和查看方法编写单元测试,以确保您获得正确的值。 https://docs.djangoproject.com/en/1.3/topics/testing/
如果你不习惯编写单元测试,现在是开始的好时机。他们真的可以节省你很多时间。