这是我的方法:
class GenreSerializer(serializers.ModelSerializer): # ... snip ... def validate_name(self, value): if self.context['request']._request.method == 'POST':if self.meta.model.objects.filter(name=value).exists(): raise ValidationError('A genre with this name already exists.') return value这样,仅在
Genre创建新对象(
POST)时才触发验证,而在更新新对象()时才触发验证
PUT。创建
新
Book对象时,对的验证
Genre将传播到嵌套的序列化程序。
验证后将保留所有表单输入,并且错误消息将附加到该字段
name。
实际上符合我的所有条件。尽管我不认为这是正确的做法。我仍然想知道如何手动调用
Uniquevalidatorin
validate_name,而不是重新发明该验证。
编辑:
我找到了一种方法来调用
Uniquevalidator方法:
def validate_name(self, value): if self.context['request']._request.method == 'POST': unique = Uniquevalidator( self.meta.model.objects.all(), message='Genre with this name already exists.' ) unique.set_context(self.fields['name']) unique(value) return value



