如何在 Django 中将 2 个模型字段结合在一起?

Posted

技术标签:

【中文标题】如何在 Django 中将 2 个模型字段结合在一起?【英文标题】:How to unite together 2 model fields in Django? 【发布时间】:2016-05-24 02:44:50 【问题描述】:

我的模型类中有 2 个字段

class A(model.Model):
    field1 = models.ImageField(upload_to='path', null=True)
    field2 = models.URLField(null=True)

我需要联合起来,这样如果第一个字段已满,第二个字段就无法填写。反之亦然。

我尝试使用字段 unique_together 在 A 类中创建 Meta 类:

class Meta:
    unique_together = (field1, field2)

但在这种情况下,两个字段都不能为空,并且都可以为满。但我需要只有 1 个字段必须是满的。

【问题讨论】:

我不确定模型级别是否有任何东西可以强制执行此操作。为什么不在表单级别强制执行此操作? docs.djangoproject.com/en/dev/ref/forms/validation/… 目前我在视图级别执行此操作,但我想在模型级别执行此操作 【参考方案1】:

在你的模型中自定义 save() 方法:

def save(self, *args, **kwargs):
    if not self.field1:
        self.field2 = ...
    if not self.field2:
        self.field1 = ...    
    super(A,self).save(*args,**kwargs)

【讨论】:

以上是关于如何在 Django 中将 2 个模型字段结合在一起?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 中将一个表单字段拆分为模型的多个字段?

Django:在模型选择中将惰性翻译与标记安全相结合

如何在Django Admin中将ImageField限制为几个选项

Django在一页中合并查询集

在 Django 中将模型字段设置为必填

Django 和 postgres - 在模型字段中将数据存储为 json 的缺点