Serializer:Django बाकी ढांचे नेस्ट serializer आंशिक अद्यतन
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = UserProfile
fields = ('foo', 'bar')
class UserSerializer(serializers.ModelSerializer):
userprofile = ProfileSerializer(partial=True)
class Meta:
model = User
fields = ('username', 'password', 'email', 'userprofile')
def create(self, validated_data):
profile_data = validated_data.pop('userprofile')
user = User.objects.create(**validated_data)
UserProfile.objects.create(user=user, **profile_data)
return user
def update(self, instance, validated_data):
profile_data = validated_data.pop('userprofile')
profile = instance.userprofile
instance.username = validated_data.get('username', instance.username)
instance.email = validated_data.get('email', instance.email)
instance.save()
profile.foo = profile_data.get('foo', profile.foo)
profile.bar = profile_data.get('bar', profile.bar)
profile.save()
return instance
दृश्य:
class UsersViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated,)
दोनों बना सकते हैं और अद्यतन ठीक काम कर रहे हैं, समस्या आंशिक अद्यतन के साथ है। django उपयोगकर्ता मॉडल के रूप में आवश्यक उपयोगकर्ता नाम है और मैं इसे वैकल्पिक बनाना चाहता हूं। क्या इस परिदृश्य के लिए आंशिक अद्यतन सक्षम करने का कोई तरीका है?
उदाहरण के लिए मैं सिर्फ "foo" के साथ PUT के साथ अपडेट करना चाहता हूं।
def get_serializer(self, instance=None, data=None, many=False, partial=False):
"""If request is not PUT, allow partial updates."""
if self.request.method == 'PUT':
return UserSerializer(instance=instance, data=data, many=many, partial=True)
else:
return UserSerializer(instance=instance, data=data, many=many, partial=partial)
यह सच है के लिए आंशिक मजबूर करता है, तो request.method डाल दिया जाता है: