Django rest framework 数据未传递到DRF中的嵌套序列化程序
我正在尝试对我的公司概要文件序列化程序的元字段进行验证,但是数据没有传递到嵌套的序列化程序中。 我收到一个错误:AttributeError:“CompanyProfileMetaSerializer”对象没有属性“initial\u data” 这是我的公司配置文件序列化程序:-Django rest framework 数据未传递到DRF中的嵌套序列化程序,django-rest-framework,django-serializer,Django Rest Framework,Django Serializer,我正在尝试对我的公司概要文件序列化程序的元字段进行验证,但是数据没有传递到嵌套的序列化程序中。 我收到一个错误:AttributeError:“CompanyProfileMetaSerializer”对象没有属性“initial\u data” 这是我的公司配置文件序列化程序:- class CompanyProfileSerializer(serializers.ModelSerializer): logo = ImageLinkSerializer(read_only=True)
class CompanyProfileSerializer(serializers.ModelSerializer):
logo = ImageLinkSerializer(read_only=True)
company_locations = CompanyLocationSerializer(many=True, read_only=True)
meta = CompanyProfileMetaSerializer(required=False)
def update(self, instance, validated_data):
meta = validated_data.get('meta')
established_data = meta['established']
if established_data:
instance.meta['established'] = instance.meta['established']
instance.meta['social_links'] = meta['social_links']
instance.description = validated_data.get('description', instance.description)
instance.save()
return instance
class Meta:
model = Company
fields = ['name', 'logo', 'company_locations', 'kind', 'strength', 'description', 'meta']
read_only_fields = ['name', 'kind', 'strength']
class CompanyProfileMetaSerializer(serializers.Serializer):
established = serializers.DateField(read_only=True)
social_links = SocialLinksSerializer(required=True, many=True)
def validate(self, attrs):
print(attrs)
unknown = set(self.initial_data) - set(self.fields)
if unknown:
raise ValidationError(f'Unknown fields: {", ".join(unknown)}')
return attrs
class SocialLinksSerializer(serializers.Serializer):
type = serializers.CharField(required=True)
url = serializers.URLField(required=True)
def validate(self, attrs):
social_links_data = self.parent.parent.initial_data['social_links']
for link in social_links_data:
unknown = set(link) - set(self.fields)
if unknown:
raise ValidationError(f'Unknown fields: {", ".join(unknown)}')
return attrs
这是我的公司ProfileMetaSerializer:-
class CompanyProfileSerializer(serializers.ModelSerializer):
logo = ImageLinkSerializer(read_only=True)
company_locations = CompanyLocationSerializer(many=True, read_only=True)
meta = CompanyProfileMetaSerializer(required=False)
def update(self, instance, validated_data):
meta = validated_data.get('meta')
established_data = meta['established']
if established_data:
instance.meta['established'] = instance.meta['established']
instance.meta['social_links'] = meta['social_links']
instance.description = validated_data.get('description', instance.description)
instance.save()
return instance
class Meta:
model = Company
fields = ['name', 'logo', 'company_locations', 'kind', 'strength', 'description', 'meta']
read_only_fields = ['name', 'kind', 'strength']
class CompanyProfileMetaSerializer(serializers.Serializer):
established = serializers.DateField(read_only=True)
social_links = SocialLinksSerializer(required=True, many=True)
def validate(self, attrs):
print(attrs)
unknown = set(self.initial_data) - set(self.fields)
if unknown:
raise ValidationError(f'Unknown fields: {", ".join(unknown)}')
return attrs
class SocialLinksSerializer(serializers.Serializer):
type = serializers.CharField(required=True)
url = serializers.URLField(required=True)
def validate(self, attrs):
social_links_data = self.parent.parent.initial_data['social_links']
for link in social_links_data:
unknown = set(link) - set(self.fields)
if unknown:
raise ValidationError(f'Unknown fields: {", ".join(unknown)}')
return attrs
这是我的社交链接浏览器:-
class CompanyProfileSerializer(serializers.ModelSerializer):
logo = ImageLinkSerializer(read_only=True)
company_locations = CompanyLocationSerializer(many=True, read_only=True)
meta = CompanyProfileMetaSerializer(required=False)
def update(self, instance, validated_data):
meta = validated_data.get('meta')
established_data = meta['established']
if established_data:
instance.meta['established'] = instance.meta['established']
instance.meta['social_links'] = meta['social_links']
instance.description = validated_data.get('description', instance.description)
instance.save()
return instance
class Meta:
model = Company
fields = ['name', 'logo', 'company_locations', 'kind', 'strength', 'description', 'meta']
read_only_fields = ['name', 'kind', 'strength']
class CompanyProfileMetaSerializer(serializers.Serializer):
established = serializers.DateField(read_only=True)
social_links = SocialLinksSerializer(required=True, many=True)
def validate(self, attrs):
print(attrs)
unknown = set(self.initial_data) - set(self.fields)
if unknown:
raise ValidationError(f'Unknown fields: {", ".join(unknown)}')
return attrs
class SocialLinksSerializer(serializers.Serializer):
type = serializers.CharField(required=True)
url = serializers.URLField(required=True)
def validate(self, attrs):
social_links_data = self.parent.parent.initial_data['social_links']
for link in social_links_data:
unknown = set(link) - set(self.fields)
if unknown:
raise ValidationError(f'Unknown fields: {", ".join(unknown)}')
return attrs
通常,当我们在嵌套的
序列化程序上执行CRUD操作时,最好从验证的\u数据中弹出数据的嵌套部分。