1 回答

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊
您需要使用不同的序列化程序進(jìn)行更新和創(chuàng)建。此序列化程序僅適用于獲取。
或者,您可以創(chuàng)建自定義字段。
或者,可以有其他更簡(jiǎn)單的鉤子。如果 'create' 和 'update' 在修改之前如您所愿地工作
members
,那么您可以按照以下步驟將創(chuàng)建和更新請(qǐng)求的所有內(nèi)容設(shè)置為默認(rèn)值。
而不是使用
SerializerMethodField
,覆蓋序列化器表示。
class CompanySerializer(serializers.ModelSerializer):
? ? user = UserSerializer(read_only=False)
? ? class Meta:
? ? ? ? model = Company
? ? ? ? fields = ('id', 'name', 'description', 'date_created', 'user', 'status', 'theme', 'members', 'members_data')
? ? def to_representation(self, obj)
? ? ? ? ret = super().to_representation(obj)
? ? ? ? ret["members"] = AccountSerializer(accounts, many=True).data
? ? ? ? return ret
覆蓋__init__方法。.
class CompanySerializer(serializers.ModelSerializer):
? ? user = UserSerializer(read_only=False)
? ? def __init__(self, *args, **kwargs):
? ? ? ? super().__init__(*args, **kwargs)
? ? ? ? try:
? ? ? ? ? ? if self.context['request'].method in ['GET']:
? ? ? ? ? ? ? ? self.fields['members'] = SerializerMethodField()
? ? ? ? except KeyError:
? ? ? ? ? ? pass
? ? class Meta:
? ? ? ? model = Company
? ? ? ? fields = '__all__' #('id', 'name', 'description', 'date_created', 'user', 'status', 'theme', 'members')
? ? def get_members(self, obj):
? ? ? ? accounts = Account.objects.filter(id__in=obj.members)
? ? ? ? return AccountSerializer(accounts, many=True).data
...
或者,您可以創(chuàng)建不同的字段來(lái)獲取成員。
class CompanySerializer(serializers.ModelSerializer):
? ? user = UserSerializer(read_only=False)
? ? members_data = SerializerMethodField()
? ? class Meta:
? ? ? ? model = Company
? ? ? ? fields = ('id', 'name', 'description', 'date_created', 'user', 'status', 'theme', 'members', 'members_data')
? ? def get_members_data(self, obj):
? ? ? ? accounts = Account.objects.filter(id__in=obj.members)
? ? ? ? return AccountSerializer(accounts, many=True).data
...
添加回答
舉報(bào)