Я использую Django 1.4, и я хочу установить правила проверки, которые сравнивают значения разных строк.
У меня есть три простых класса
В 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)
Так, например, можно купить бутылку rhum на 10 $и одну водки при 8 $. Майк платит 15 $, а Том платит 3 $.
Цель состоит в том, чтобы запретить пользователю сохранять экземпляр с суммами, которые не совпадают: то, что было оплачено, должно быть таким же, как сумма стоимости предмета (например, 10 + 8 = 15 + 3).
Я пробовал:
- повышение ValidationError в методе Shopping.clean. Но встроенные строки еще не обновлены в чистоте, поэтому суммы неверны.
- повышение ValidationError в методе ShoppingAdmin.save_related. Но повышение ValidationError здесь дает очень недружественную страницу ошибок пользователя, а не перенаправление на страницу с хорошим сообщением об ошибке.
Есть ли какое-либо решение этой проблемы? Является ли проверка на стороне клиента (javascript/ajax) самой простой?