在两个字段中拒绝空值

时间:2018-08-13 14:52:55

标签: sql django postgresql

我有以下型号:

class PotentialUser(models.Model):
    pass

class Lead(models.Model):
    class Meta:
        db_table = 'leads'

    user = models.ForeignKey(to=User, null=True, unique=True)
    potential_user = models.ForeignKey(to=PotentialUser, null=True, unique=True)

我想在null字段和user字段中允许potential_user,但不允许null一起应用于两个字段。我该如何实现?

在模型集Meta.unique_together中,我只有一个主意,并用null usernull potential_user创建一条线索。但是有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我刚刚添加了以下迁移:

class Migration(migrations.Migration):

    dependencies = [
        ('core', '0001_initial'),
    ]

    operations = [
        migrations.RunSQL(
            sql='ALTER TABLE leads ADD CONSTRAINT "leads_both_not_null" CHECK (user_id IS NOT NULL OR potential_user_id IS NOT NULL)',
            reverse_sql='ALTER TABLE core_example DROP CONSTRAINT "leads_both_not_null"'
        )
    ]