我正在使用 Django 1.4,我想设置比较不同内联值的验证规则。
我有三个简单的类
在模型.py 中:
class Shopping(models.Model):
shop_name = models.CharField(max_length=200)
class Item(models.Model):
item_name = models.CharField(max_length=200)
cost = models.IntegerField()
item_shop = models.ForeignKey(Shopping)
class Buyer(models.Model):
buyer_name = models.CharField(max_length=200)
amount = models.IntegerField()
buyer_shop = models.ForeignKey(Shopping)
在 admin.py 中:
class ItemInline(admin.TabularInline):
model = Item
class BuyerInline(admin.TabularInline):
model = Buyer
class ShoppingAdmin(admin.ModelAdmin):
inlines = (ItemInline, BuyerInline)
例如,可以以 10 美元的价格购买一瓶朗姆酒,以 8 美元的价格购买一瓶伏特加。迈克支付 15 美元,汤姆支付 3 美元。
目标是防止用户保存总和不匹配的实例:已支付的金额必须与项目成本的总和相同(即 10+8 = 15+3)。
我试过:
- 在 Shopping.clean 方法中引发 ValidationError。但是内联还没有更新干净所以总和不正确
- 在 ShoppingAdmin.save_related 方法中引发 ValidationError。但是在这里提高 ValidationError 会给出一个对用户非常不友好的错误页面,而不是重定向到带有漂亮错误消息的更改页面。
这个问题有什么解决办法吗?客户端(javascript/ajax)验证是最简单的吗?