drf 中的唯一验证器

Gio*_*sia 6 python django serialization django-rest-framework

我的模型有一个字段:

name = models.CharField(max_length=255, blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)

在序列化器中,我试图提出一个独特的验证错误

name = serializers.CharField(validators=[UniqueValidator(queryset=Department.objects.all(),
                                        message=("Name already exists"))])
Run Code Online (Sandbox Code Playgroud)

但它不起作用,因为数据以这种格式进入序列化器name: {en: "drink"},仅在数据库字段中填充drink

我可以在方法中引发错误create,但我想在序列化器上引发错误。感谢任何建议。我很急。任何不便敬请谅解。

提前致谢

Rad*_*deh 6

我强烈建议您使用 Django Rest Framework 的序列化器字段级验证,它允许您对字段进行自定义验证。

像下面这样:

    name = serializers.CharField()
    ...
    def validate_name(self, value):
        # I assumed that you will that the string value, is a JSON object.
        entered_name = json.loads(value).get('en', None)
        if entered_name and Department.objects.filter(name__exact=entered_name).exists():
            raise serializers.ValidationError("Name already exists!")
        # You need to return the value in after validation.
        return value
     ...

Run Code Online (Sandbox Code Playgroud)