如何验证objects.create()方法的选择?

时间:2018-10-27 19:59:43

标签: 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(...)类型验证无效。 我该如何激活验证?

1 个答案:

答案 0 :(得分:1)

您可以创建一个(抽象的)模型,该模型首先执行验证,然后使用以下方法保存对象:

class ValidatedModel(models.Model):

    class Meta:
        abstract = True

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

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

class Artist(ValidatedModel):

    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(..),等