django - 我可以在Django模型上至少要求一个字段吗?

标签 django django-models

假设我有一个人物模型:

class Person(models.Model):
    name = models.CharField(max_length=50)

    email = models.EmailField()
    telephone = models.CharField(max_length=50)

我想为每个人确保有联系信息。我不需要电子邮件和电话(虽然都可以),但我需要确保至少提供了一个。

我知道我可以检查表单中的内容,但是有什么方法可以在模型/数据库级别执行此操作以免重复我自己?

最佳答案

为您的模型编写一个 clean 方法。

from django.core.exceptions import ValidationError


class Person(models.Model):
    name = models.CharField(max_length=50)
    email = models.EmailField()
    telephone = models.CharField(max_length=50)

    def clean(self):
        if not (self.email or self.telephone):
            raise ValidationError("You must specify either email or telephone")

如果您使用模型形式(例如,在Django admin中),则Django将为您调用clean方法。或者,如果直接使用ORM,则可以在实例上手动调用 full_clean() 方法。

关于django - 我可以在Django模型上至少要求一个字段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31831620/

相关文章:

python - 在 Django 中做 'mad lib' 样式表单字段的任何简单方法?

python - Django:复合字段或嵌入式类(如 JPA)?

Django 模型在错误的列中返回值

python - Django:使用延迟查询时获取模型类型

python - 如何在 Django 中设置时区

python - 是否有任何模块允许 Django/Python 与 gnupg 一起工作?

python - 自动填充 Django ModelForms

Django ModelManager 继承

mysql - 在django模型中设置null=True或blank=True有什么优缺点?

python - 不断收到此错误,不确定为什么 "Can' t 将 'set' 对象隐式转换为 str”