我正在使用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