我有以下模型:
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(...)
类型验证无效。
我该如何激活验证?
答案 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(..)
,等