Django 1.4 を使用しており、異なるインラインの値を比較する検証ルールを設定したいと考えています。
私は3つの簡単なクラスを持っています
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 ドルで、ウォッカを 1 杯 8 ドルで購入することができます。マイクは 15 ドル、トムは 3 ドルを支払います。
目標は、ユーザーが金額が一致しないインスタンスを保存しないようにすることです。支払われた金額は、アイテムの費用の合計と同じでなければなりません (つまり、10+8 = 15+3)。
私は試した:
- Shopping.clean メソッドで ValidationError を発生させます。しかし、インラインはまだきれいに更新されていないため、合計は正しくありません
- ShoppingAdmin.save_related メソッドで ValidationError を発生させます。しかし、ここで ValidationError を発生させると、適切なエラー メッセージとともに変更ページにリダイレクトされる代わりに、非常にユーザーフレンドリーでないエラー ページが表示されます。
この問題の解決策はありますか? クライアント側 (javascript/ajax) の検証は最も単純ですか?