[英]How to give validations for a PrimaryKeyRelatedField serializer
如何將 required=true 之類的驗證添加到 primarykeyrelated 序列化程序?
模型.py
class WorkLocation(models.Model):
city = models.CharField(max_length=255)
latitude = models.FloatField()
longtitude = models.FloatField()
序列化程序.py
class WorkLocationField(serializers.PrimaryKeyRelatedField):
queryset = WorkLocation.objects.all()
def to_internal_value(self, data):
if type(data) == dict:
location, created = WorkLocation.objects.get_or_create(**data)
data = location.pk
return super().to_internal_value(data)
class JobPostSerializer(serializers.ModelSerializer):
work_location = WorkLocationField()
class Meta:
model = JobPost
fields = "__all__"
我的部分數據如下所示:
"hourly_pay": 10,
"yearly_pay": 120,
"work_location": {
"city": "kottayam",
"latitude": 0.00001,
"longtitude": 0.0012
},
"Benefit": [
1
],
我需要對嵌套的 JSON 數據進行驗證。
從你的情況來看JobPostSerializer
,好像你JobPost
模式有一個OneToOne
有關系WorkLocation
。這意味着你的models.py
如下所示:
class WorkLocation(models.Model):
city = models.CharField(max_length=255)
latitude = models.FloatField()
longtitude = models.FloatField()
class JobPost(models.Model):
work_location = models.OneToOneField(WorkLocation, on_delete=models.CASCADE)
為了提供work_location現場驗證的JobPostSerializer
,您可以創建WorkLocationSerializer
如下:
class WorklocationSerializer(serializers.ModelSerializer):
class Meta:
model = WorkLocation
fields = "__all__"
# field level validation
def validate_city(self, value):
# value validation
return value
def validate(self, data):
# data validation
return data
class JobPostSerializer(serializers.ModelSerializer):
class Meta:
model = JobPost
fields = "__all__"
work_location = WorkLocationSerializer()
通過這種方式,您可以在WorkLocationSerializer
執行所有驗證,並且當作為字段添加到另一個序列化器上時,嵌套驗證會起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.