django DRF中的UniqueValidator

vecaoik1  于 2023-11-20  发布在  Go
关注(0)|答案(3)|浏览(225)

我的模型有一个字段:

  1. name = models.CharField(max_length=255, blank=True, null=True)

字符串
在序列化程序中,我试图引发唯一的验证错误

  1. name = serializers.CharField(validators=[UniqueValidator(queryset=Department.objects.all(),
  2. message=("Name already exists"))])


但是它不起作用,因为数据以这种格式name: {en: "drink"}到达串行化器,在db字段中只填充drink
我可以在create方法中引发错误,但我想在序列化程序中引发错误。感谢任何建议。我很着急。抱歉给您带来不便。
Thanks in advance

xsuvu9jc

xsuvu9jc1#

我强烈建议你使用Django Rest Framework的Serializer字段级验证,它允许你为你的字段做自定义验证。
如下所示:

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

字符串

uqdfh47h

uqdfh47h2#

您可以在Serializers.py中的Meta类下面执行此操作,因为它会引发错误,错误名称必须是唯一的

  1. class Meta:
  2. model = YourModel
  3. fields= ('name',)
  4. extra_kwargs = {
  5. 'name': {
  6. 'validators': [
  7. UniqueValidator(
  8. queryset=YourModelName.objects.all()
  9. )
  10. ]
  11. }
  12. }

字符串

xwbd5t1u

xwbd5t1u3#

我没有使用UniqueValidator,所以我黑了UniqueTogetherValidator
像这样;
导入:
from rest_framework.validators import UniqueTogetherValidator
然后:

  1. class NameSerializer(serializers.ModelSerializer):
  2. class Meta:
  3. model = NameOfModel
  4. fields = ['id', 'name']
  5. validators = [
  6. UniqueTogetherValidator(
  7. queryset=NameOfModel.objects.all(),
  8. fields=['name']
  9. )
  10. ]

字符串
如果您希望名称字段是唯一的。
参考:这里

展开查看全部

相关问题