django跳过一个字段的验证

时间:2013-09-27 23:55:21

标签: django django-validation

我需要跳过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',)

1 个答案:

答案 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社区大量使用。我会阅读有关数据库迁移的信息,看看你是否能以这种方式提出解决方案。