我试图创建一个简单的模型来跟踪Django 1.10中的折扣优惠券(以Postgres 9.5作为底层数据库),我想知道是否有办法确保优惠券实例(id
,也许是一个更准确的术语?)不会同时出现在两个M2M关系中。
我确定每个人都熟悉优惠券的工作方式,但为了以防万一,让我解释一下用例:
为了跟踪这些事情,我有一个这样的模型:
class CouponTracker(models.Model):
# Coupons that require a code to be activated:
extra_applied_coupons = ManyToManyField('Coupon', related_name='+')
# Coupons that the user could have applied and specifically
# said no (such as 5% off if the purchase is small, and wants
# to use it later):
vetoed_coupons = ManyToManyField('Coupon', related_name='+')
所以,问题是:
如何(在数据库级别,通过约束)强制优惠券不会同时出现在extra_applied_coupons
和vetoed_coupons
中?
提前谢谢!
答案 0 :(得分:1)
为什么不将2 extra_applied_coupons
和vetoed_coupons
合并,还有1个字段(例如type
)来确定优惠券组。然后问题会更简单,只需确保1 ManyToMany
关系中的唯一性
class CouponTracker(models.Model):
coupons = ManyToManyField('Coupon', related_name='+')
type = models.IntegerField(default=0)
type
对于extra_applied_coupons
可以为0,对于vetoed_coupons
可以为1。
如果您想添加更多关系属性,可以查看https://docs.djangoproject.com/en/1.11/topics/db/models/#extra-fields-on-many-to-many-relationships
答案 1 :(得分:0)