我有一个数组("朋友"),如下所示,我希望能够追加到。我正在使用常规的UpdateAPIView,但每当我把新朋友PUT / PATCH给#34;朋友"数组,它只用新朋友完全覆盖数组。
{
"friends": [
{
"first_name": "Bob"
},
{
"first_name": "Jon"
}
],
"first_name": "User1",
}
如何使用UpdateAPIView允许将新项添加到数组中而无需重新发布整个数组。并确保朋友列表中不包含任何重复项?
模型
我实际上使用MongoDB作为我的数据库,但如果你想想我使用mysql / postgres只是忽略使用MongoDB的事实
class UserProfile(Document):
db_id = IntField()
email = EmailField()
first_name = StringField()
last_name = StringField()
city = StringField()
friends = ListField(ReferenceField('self'))
串行器
class UserProfileSerializer(MongoEngineModelSerializer):
friends = PublicProfileSerializer(many=True, allow_add_remove=True)
class Meta:
model = UserProfile
depth = 1
exclude = ('db_id',)
class PublicProfileSerializer(MongoEngineModelSerializer):
class Meta:
model = UserProfile
fields = ('first_name', 'last_name', 'id')
答案 0 :(得分:0)
正如@norbertpy在评论中提到的,您可以向序列化器添加update
方法,以指定您希望如何处理更新(在这种情况下,请确保进行增量更新而不是覆盖更新)现有数据)。已记录在here中。
以下是使用update
方法的代码的示例:
class UserProfileSerializer(MongoEngineModelSerializer):
friends = PublicProfileSerializer(many=True, allow_add_remove=True)
class Meta:
model = UserProfile
depth = 1
exclude = ('db_id',)
class PublicProfileSerializer(MongoEngineModelSerializer):
class Meta:
model = UserProfile
fields = ('first_name', 'last_name', 'id')
def update(self, user_profile_instance, validated_friend_data):
user_profile_instance.friends.extend(validated_friend_data)
user_profile_instance.save()
return user_profile_instance