0
컨텍스트 : 중첩 된 직렬화기에 의해 유효성이 검사되는 필드에 액세스하는 데 문제가 있습니다. 아래 그림과 같이 매우 샘플 모델이 있습니다. 2 개 필드의 경우 해당 특정 serializer가 있습니다. 데이터에 액세스하려고하면 특정 serializer에서 유효성을 검사 한 필드를 제외한 모든 필드를 반환합니다.serializer.data에 일부 데이터가 누락되었습니다.
모델
class ExtractionsSerializer(serializers.BaseSerializer):
table_name = serializers.CharField()
extraction_type = serializers.ChoiceField(["ABC"])
dependencies = serializers.ListField(child=RecursiveField(), allow_empty=True, required=False)
class SamplingBySerializer(serializers.BaseSerializer):
"""
Validate sampling_by
"""
def to_internal_value(self, samples):
methods = ["ABC"]
sampling_not_supported = [sample for sample in samples
if sample['by'] not in methods]
if sampling_not_supported:
raise ValidationError("{} not in {}".format(sampling_not_supported, methods))
class SamplerSerializer(serializers.ModelSerializer):
extractions = ExtractionsSerializer(read_only=True)
sampling_by = SamplingBySerializer(read_only=True)
class Meta:
model = Sampler
fields = ('sample_name', 'database', 'schema', 'sampling_by', 'extractions', 'max_samples')
가 지금은
data = {
"database": "postgresql://..",
"sampling_by":[{
"by":"ABC",
"value": ["l32=turn_the"]
}],
"max_samples":3,
"extractions" : [{
"table_name": "person",
"extraction_type": "ABC"
}]
}
sampler = SamplerSerializer(data=data)
sampler.is_valid() #returns True
sampler.data => does not contain data of the nested fields. Like the `sampling_by` and `extractions`. Contains all other fields
sampler.validated_data => same problem as above
어떤 도움을 주시면 감사하겠습니다
을이class Sampler(models.Model):
sample_name = models.CharField(unique=True, max_length=100)
sampling_by = JSONField(max_length=100)
extractions = JSONField(max_length=100)
max_samples = models.IntegerField(default=100)
직렬 변환기처럼 보인다! 감사
어떻게 데이터에 액세스합니까? 'serializer.data'가 아니라면 –
나는 당신이 말한 것처럼 위와 같이했다. 'read_only = True'를 삭제하고 시리얼 라이저에 create를 구현했습니다. 하지만 이제는 나에게 "to_internal_value() 구현해야합니다"오류가 발생합니다. 나는 왜 그 오류를 이해하지 못합니다! –
아마도 RecursiveField에 문제가 있습니다. – Linovia