我正在使用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)
因此,例如可以以10美元的价格购买一瓶朗姆酒和以8美元的价格购买一瓶伏特加酒。迈克支付15美元,汤姆支付3美元。
目的是防止用户以不匹配的金额保存实例:已支付的金额必须与商品费用的金额相同(即10 + 8 = 15 + 3)。
我试过了:
有什么解决办法吗?客户端(javascript / ajax)验证最简单吗?
您可以覆盖内联表单集以实现所需的功能。在表单集的clean方法中,您可以通过“实例”成员访问Shopping实例。因此,您可以使用购物模型暂时存储计算出的总数,并使表单集进行通信。在models.py中:
class Shopping(models.Model):
shop_name = models.CharField(max_length=200)
def __init__(self, *args, **kwargs)
super(Shopping, self).__init__(*args, **kwargs)
self.__total__ = None
在admin.py中:
from django.forms.models import BaseInlineFormSet
class ItemInlineFormSet(BaseInlineFormSet):
def clean(self):
super(ItemInlineFormSet, self).clean()
total = 0
for form in self.forms:
if not form.is_valid():
return #other errors exist, so don't bother
if form.cleaned_data and not form.cleaned_data.get('DELETE'):
total += form.cleaned_data['cost']
self.instance.__total__ = total
class BuyerInlineFormSet(BaseInlineFormSet):
def clean(self):
super(BuyerInlineFormSet, self).clean()
total = 0
for form in self.forms:
if not form.is_valid():
return #other errors exist, so don't bother
if form.cleaned_data and not form.cleaned_data.get('DELETE'):
total += form.cleaned_data['cost']
#compare only if Item inline forms were clean as well
if self.instance.__total__ is not None and self.instance.__total__ != total:
raise ValidationError('Oops!')
class ItemInline(admin.TabularInline):
model = Item
formset = ItemInlineFormSet
class BuyerInline(admin.TabularInline):
model = Buyer
formset = BuyerInlineFormSet
这是您可以做到的唯一干净方法(据我所知),一切都放置在应有的位置。
编辑: 添加了 if form.cleaned_data 检查,因为表单也包含空内联。请让我知道它如何为您服务!
EDIT2: 添加了将要删除的表单的检查,如注释中正确指出的那样。这些表格不应参与计算。
maven允许您在pom文件中定义: (A) - (B) /- 如果我把错误/未知的工件放在A类-maven肯定会失败。 如果我将错误/未知工件放在类别B上-maven只会在它影响类别A时失败(例如,A在上定义dep,B在
When you want to add, upgrade, or remove dependencies there are a couple of different commands you need to know. Each command will automatically update your package.json and yarn.lock files. Adding a
简介 在第三章我们在构建To Do应用的时候学习到了怎么声明对Servlet ApI的依赖,Gradle的领域特定语言使得声明依赖和仓库变得很简单,你只需要在dependencies脚本中声明你所依赖的库,然后你需要告诉构建系统要从哪个仓库里下载依赖。提供了这两个信息,Gradle就能自动解析、下载依赖到你的电脑上,如果有需要会存储在本地缓存中必备以后需要。 这一章我们将介绍Gradle对依赖管理
PHP 有很多可供使用的库、框架和组件。通常你的项目都会使用到其中的若干项 - 这些就是项目的依赖。直到最近,PHP 也没有一个很好的方式来管理这些项目依赖。即使你通过手动的方式去管理,你依然会为自动加载器而担心。但现在这已经不再是问题了。 目前 PHP 有两个使用较多的包管理系统 - Composer 和 PEAR。Composer 是 PHP 所使用的最流行的包管理器,然而在很长的一段时间里,
在San CLI UI中,可直接进行项目插件和依赖的安装、更新、卸载、删除等操作,依赖管理和插件管理的核心是npm包的安装可视化操作,好处是: npm install的可视化管理,组件升级更直观 操作简单,快速引入依赖 CLI的插件集合,更容易发现新包,提升检索效率 依赖管理 在依赖管理中,可以查看项目已安装的依赖列表,也可以在上方的搜索框中搜索项目已安装的依赖,然后更新或卸载它们。 安装依赖 点
SOFABoot 是在 Spring Boot 的基础上提供的功能扩展。基于 Spring Boot 的机制,SOFABoot 管理了 SOFA 中间件的依赖,并且提供了 Spring Boot 的 Starter,方便用户在 Spring Boot 中使用 SOFA 中间件。 SOFABoot 依赖管理 – Maven 在使用 SOFA 中间件之前,需要引入 SOFABoot 依赖管理。类似 S