我正在使用Django 1.4,我想设置比较不同内联值的验证规则。django中依赖内联的验证admin
我有三个简单的类
在models.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)验证最简单吗?
你好,你有想过这个吗?我面对完全相同的问题。我能想到的唯一解决方案是内联模型的clean方法,但这会产生大的数据库开销。 – ppetrid
我想一个解决方案是编辑django管理员的行为。看看django/contrib/admin/options.py,add_view方法行924 – Rems