1

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

1 回答 1

0

对于PositiveSmallIntegerField,Django 所做的唯一验证是确保该值确实是适当范围内的正整数。如果你跳过这个,当 Django 尝试将值写入你的数据库时,你会遇到问题。例如,如果您尝试将值“marshmallows”写入期望整数的 DB 列,则 DB 将抛出错误,Django 将转身并抛出IntegrityError

如果您真的想尝试,您可以将字段覆盖为CharField并将 required 设置为False(基本上允许任何键盘输入):

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

Django 会True在你运行时返回is_valid(),但在你尝试调用时抛出错误save()


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

于 2013-09-28T08:43:28.890 回答