【发布时间】:2016-07-01 00:06:00
【问题描述】:
我使用的是 Django 1.9。我有一个简单的模型:
#Goods
class Goods(models.Model):
code = models.CharField(max_length=50)
decription = models.CharField(max_length=100)
...etc
#Vendors
class Vendors(models.Model):
name = models.CharField(max_length=50)
address = models.CharField(max_length=100)
...etc
还有一个类来定义多个厂商获取一个好。
#Purchase_options
class PurchaseOptions(models.Model):
preferred_vendor = models.BooleanField()
vendor = models.ForeignKey(Vendors)
good = models.ForeignKey(Goods)
问题来了: 如何确保可以将特定商品的只有一个供应商设置为首选?
表格上接受的值:
**Vendor | Product | Preferred**
V_01 | Good_01 | True
V_02 | Good_01 | False
V_03 | Good_01 | False
V_02 | Good_02 | True
V_04 | Good_02 | False
表格上的值错误:
**Vendor | Product | Preferred**
V_01 | Good_01 | True
V_02 | Good_01 | **True** <-There's already a preferred vendor.
V_03 | Good_01 | False
V_02 | Good_02 | True
V_04 | Good_02 | False
我正在使用 Django 的管理界面来填充 Puchase_Options 上的数据。 我试过这个:
1) 定义一个验证器,在给定首选值和产品 ID 的情况下,检查该组合是否存在于表中:
def validator(preferred, id):
if Purchase_Option.objects.filter(good.id=id,preferred_vendor=preferred).exists():
Raise ValidationError("There's already a preferred vendor defined for this product")
但它告诉我对象 Purchase_Options 不存在。我相信我实际上无法在验证器函数中查询数据库或处理查询集。
2) 我尝试使用元属性 unique-together("preferred_vendor","good_id")。除了我必须允许 False + Good_Id 的多种组合(因为我有很多非首选供应商)之外,这将起作用......但只有 True+Good_id 的 1 个组合.
我真的不知道还能尝试什么,我真的很期待听到您的想法。你之前曾多次救过我 :D
【问题讨论】:
标签: python django validation model