约束fk关系,因此它只能有一个类型

时间:2016-08-24 11:41:28

标签: django django-models

我有预订和付款模式。每个预订可以有多个付款。有更多的类型和字段,但这应该足以说明我想要做的事情。

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吗?

其他付款方式可以不是唯一的。

1 个答案:

答案 0 :(得分:0)

您应该可以使用unique_together约束强制执行此操作:

class Payment(models.Model):
    ...
    class Meta:
        unique_together = (('booking', 'payment_type'),)