我有预订和付款模式。每个预订可以有多个付款。有更多的类型和字段,但这应该足以说明我想要做的事情。
class Booking(models.Model):
cost = models.IntegerField(...)
class Payment(models.Model):
TYPE_THIRD_PARTY 'thirdparty'
TYPE_STRIPE = 'stripe'
TYPES = [
(TYPE_THIRD_PARTY, 'Third party payment'),
(TYPE_STRIPE, 'Stripe online payment')
]
booking = models.ForeignKey('Booking')
payment_type = models.CharField(..., choices=Payment.TYPES)
amount = # ...
我们的系统接受第三方预订并自动创建TYPE_THIRD_PARTY会计付款。如果第三方预订的金额发生变化,我们只会减少现有付款金额。
我们在管理员创建额外的TYPE_THIRD_PARTY付款方面遇到了一些问题。这会在自动更新通过时破坏。
我知道我可以伪造表单来删除第三方付款选项,但是有一种明智的方法可以限制数据库级别的付款,这样每次预订只能有一个pay_type = TYPE_THIRD_PARTY吗?
其他付款方式可以不是唯一的。
答案 0 :(得分:0)
您应该可以使用unique_together
约束强制执行此操作:
class Payment(models.Model):
...
class Meta:
unique_together = (('booking', 'payment_type'),)