2013-09-27 89 views
1

我需要跳过OrderAmount字段的验证,但它仍然保存失效的数据。有没有办法做到这一点?我知道django允许你进行自己的验证,但是我不知道如何完全跳过一个字段的验证。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

对于PositiveSmallIntegerField唯一验证Django的作用是确保该值确实在适当范围内的正整数。如果你想跳过这个,当Django尝试将值写入数据库时​​会遇到问题。例如,如果您想要将值“棉花糖”写入期望为整数的数据库列,数据库将抛出错误,并且Django将转过身并将您抛出IntegrityError

如果你真的想尝试一下,你可以重写字段设置为CharField与需要设置为False(基本上允许任何键盘输入):

class AddToOrderForm(forms.ModelForm): 
    OrderAmount = forms.CharField(required=False) 

Django的然后将返回True当您运行is_valid(),但当您尝试拨打save()时抛出错误。


这听起来像你的真正的问题是你的模型不符合你当前的项目要求。如果是这种情况,请考虑迁移到新模型。 Python库South是用于此目的的杰出工具,并且被Django社区广泛使用。我会仔细阅读数据库迁移,看看您是否可以通过这种方式提出解决方案。