我有以下模型,我试图根据many2many字段的值在干净方法中引发验证错误
RULE_SET_CHOICES = (
('G', 'GLOBAL'),
('C', 'LOCAL')
)
class Books(models.Model):
type = models.CharField(max_length=2, choices=RULE_SET_CHOICES, null=False, default='C')
author = models.ManyToManyField(Author, related_name="books", blank=True, null=True)
def clean(self):
if self.type = 'G':
// Check if type is Global and if we tried to associate / add authors then raise a validation error
if self.author :
raise ValidationError("When type is global, you should not associate authors")
但是当我尝试访问self.author
时,我面临以下错误
*** ValueError: "<Books: Hello World- G>" needs to have a value for field "author " before this many-to-many relationship can be used
那么在保存到数据库之前有没有办法访问多对多关系字段值?因为我需要根据上面的值提出验证错误
答案 0 :(得分:0)
如果您使用模型表单进行验证,则可以访问self.cleaned_data
中的表单字段。
我不知道检查模型的clean
方法中的值的方法。在访问多对多字段之前,您将检查self.pk
。
def clean(self):
if self.pk and self.type = 'G':
...
请注意,self.author
是相关管理员,因此if self.author
始终为真。也许你想要self.author.exists()
。由于可以有多个作者,因此最好将字段命名为authors
。