私はDjango 1.4を使用しています。異なるインラインの値を比較する検証ルールを設定したいと思います。djangoの従属インラインの検証
私は3つの単純なクラスmodels.pyで
があります。例えば、でrhumのボトルを購入することが可能であるので、
class ItemInline(admin.TabularInline):
model = Item
class BuyerInline(admin.TabularInline):
model = Buyer
class ShoppingAdmin(admin.ModelAdmin):
inlines = (ItemInline, BuyerInline)
:admin.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)
を10 $と8 $のウォッカの1つ。マイクは15ドル、トムは3ドルを支払う。
目標は、ユーザーが一致しない合計を持つインスタンスを保存しないようにすることです。支払い済みのアイテムはアイテム費用の合計(つまり10 + 8 = 15 + 3)と同じでなければなりません。
私が試した:
- をShopping.clean方法でValidationErrorをを上げます。しかしインラインはまだきれいに更新されていないので、合計が正しくない。
- ShoppingAdmin.save_relatedメソッドのValidationErrorを上げる。しかしここでValidationErrorを上げると、変更ページにリダイレクトするのではなく、非常にユーザーフレンドリーでないエラーページが表示されます。
この問題の解決方法はありますか?クライアント側(javascript/ajax)の検証は最も簡単ですか?
こんにちは、これについて何かお考えですか?私はまったく同じ問題に直面しています。私が考えることができる唯一の解決策は、インラインモデルのクリーンメソッドですが、これは大きなdbオーバーヘッドを生成します。 – ppetrid
私は1つの解決策は、djangoの管理者の動作を編集することだと思います。 django/contrib/admin/options.py、add_viewメソッドの行を見てください。924 – Rems