【问题标题】:Reject null value in two fields拒绝两个字段中的空值
【发布时间】:2019-01-20 08:22:41
【问题描述】:

我有模型:

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)

我想在user 字段和potential_user 字段中允许null,但不允许null 同时出现这两个字段。我怎样才能实现它?

我只有一个想法,在模型集Meta.unique_together 中创建一个具有null usernull potential_user 的潜在客户。但是有没有更好的方法?

【问题讨论】:

  • 或使用您自己的干净方法使用表单
  • 我想在 sql 级别添加这个验证,而不是在 django 表单中,有没有这样的方法?
  • @AndreyBerenda 当您回答自己的问题时,您应该将其作为答案发布,而不是编辑您的问题。

标签: sql django postgresql


【解决方案1】:

我刚刚添加了这样的迁移:

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"'
        )
    ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 2015-06-08
    • 2012-03-20
    • 2018-06-26
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    相关资源
    最近更新 更多