python - 如何验证 objects.create() 方法的 CHOICES?

标签 python django

我有以下模型:

from django.db import models


class Artist(models.Model):

    TYPE_CHOICES = (
        ('Person', 'Person'),
        ('Group', 'Group'),
        ('Other', 'Other'),)

    name = models.CharField(max_length=100)
    type = models.CharField(max_length=20, choices=TYPE_CHOICES)

问题是如果我像这样创建一个对象: Artist.objects.create(...) 类型验证不起作用。 我该如何激活验证?

最佳答案

您可以创建一个(抽象)模型,在保存对象之前首先执行验证:

class ValidatedModel(models.Model):

    class Meta:
        abstract = True

    def save(self, *args, **kwargs):
        self.clean_fields()      # validate individual fields
        self.clean()             # validate constraints <i>between</i> fields
        self.validate_unique()   # validate uniqness of fields
        return super(ValidatedModel, self).save(*args, **kwargs)

然后例如在以下模型中使用它:

class Artist(<b>ValidatedModel</b>):

    TYPE_CHOICES = (
        ('Person', 'Person'),
        ('Group', 'Group'),
        ('Other', 'Other'),)

    name = models.CharField(max_length=100)
    type = models.CharField(max_length=20, choices=TYPE_CHOICES)

请注意,如果您调用 .save() 方法(或其他一些函数执行此操作),上面的代码将验证模型对象,但有些方法会绕过调用 .save() 方法,如 Model.objects.bulk_create(..)

关于python - 如何验证 objects.create() 方法的 CHOICES?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53025785/

相关文章:

django - 将 PostgreSQL 中的现有 JSON 字段转换为在 PostGIS 中使用

python - Django 不允许获取/创建新对象 : QuerySet object has no attribute get_or_create

python - 在 Celery 任务中运行 Scrapy 蜘蛛

python - View 函数中无法获取表单数据: Django

python - 如何从Python Tkinter应用程序捕获到控制台的任何输出?

python - Pygame 中蒙版和发射光束的重叠 [AI 汽车模型视觉]

python - 如何在 Python 三元运算符上换行?

python - O(nlogn) 运行时间方法

mysql编码问题

python - 备忘单文档 django python