我需要跳过OrderAmount字段的验证,但仍然要保存无效的数据。有没有办法可以做到这一点?我知道django允许你进行自己的验证,但我不知道如何让它完全跳过一个字段的验证。
模特:
class LiquorOrder(models.Model):
pack_size = (
('1', '1'),
('2', '2'),
)
LiquorOrderID = models.AutoField(primary_key=True)
storeliquorID = models.ForeignKey(StoreLiquor)
orderID = models.ForeignKey(Order)
OrderAmount = models.PositiveSmallIntegerField('Order Amount', max_length=3, choices=pack_size)
TotalPrice = models.DecimalField('Total Price', max_digits=5, decimal_places=2)
表格:
class AddToOrderForm(forms.ModelForm):
class Meta:
model = LiquorOrder
fields = ('OrderAmount',)
答案 0 :(得分:0)
对于PositiveSmallIntegerField,Django唯一的验证是确保该值确实是适当范围内的正整数。如果你跳过这个,当Django试图将值写入数据库时,你会遇到问题。如果您尝试将值“marshmallows”写入期望整数的DB列,则DB将抛出错误,Django将转向并向您抛出IntegrityError。
如果您真的想尝试,可以将字段覆盖为CharField,并将所需设置为False
(基本上允许任何键盘输入):
class AddToOrderForm(forms.ModelForm):
OrderAmount = forms.CharField(required=False)
当您运行True
时,Django会返回is_valid()
,但在您尝试拨打save()
时会抛出错误。
听起来您真正的问题是您的模型与您当前的项目要求不匹配。如果是这种情况,请考虑迁移到新模型。 Python库 South 是用于此目的的绝佳工具,并且被Django社区大量使用。我会阅读有关数据库迁移的信息,看看你是否能以这种方式提出解决方案。