第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

強制只能在 Django 中使用 PUT 請求更改某些屬性

強制只能在 Django 中使用 PUT 請求更改某些屬性

BIG陽 2023-10-11 22:48:33
我想讓用戶能夠在 Django Rest API 中使用 PUT 請求僅更新某些屬性。舉個例子,如果我有以下模型并且只希望用戶能夠更新他們的名字和姓氏,我將如何去做呢?models.py:class User(models.Model):    email = models.EmailField('email address', unique = True)    first_name = models.TextField(max_length = 10)    last_name = models.TextField(max_length = 20)(請注意,他們不應該能夠更改自動設置的“id”字段)serializers.py:class UserSerializer(serializers.ModelSerializer):    class Meta:        model = User        fields = ['id', 'email', 'first_name', 'last_name']views.py:class SingleUser(APIView):    def put(self, request, user_id):        user = User.objects.get(pk = user_id)        serializer = UserEditSerializer(user, data = request.data)        if serializer.is_valid():            serializer.save()            return Response(serializer.data, status = status.HTTP_200_OK)        return Response(serializer.errors, status = status.HTTP_400_BAD_REQUEST)強制用戶只能更改這些屬性的子集的最佳方法是什么?
查看完整描述

3 回答

?
慕少森

TA貢獻2019條經驗 獲得超9個贊

您可以在序列化器上設置只讀字段:


class UserSerializer(serializers.ModelSerializer):

    class Meta:

        model = User

        fields = ['id', 'email', 'first_name', 'last_name']

        read_only_fields = ['id', 'email']

確保在 put 函數中將序列化器設置為部分:


serializer = UserEditSerializer(user, data = request.data, partial=True)

您還可以完全省略序列化程序中的字段,這將使用戶根本無法使用這些字段。


查看完整回答
反對 回復 2023-10-11
?
PIPIONE

TA貢獻1829條經驗 獲得超9個贊

創(chuàng)建一個單獨的序列化器并使用它


# serializers.py

class UserPutSerializer(serializers.ModelSerializer): # new serializer class

    class Meta:

        model = User

        fields = ['first_name', 'last_name'] # define required fields


#views.py

class SingleUser(APIView):

    def put(self, request, user_id):

        user = User.objects.get(pk=user_id)

        serializer = UserPutSerializer(user, data=request.data) # use new serializer here

        if serializer.is_valid():

            serializer.save()

            return Response(serializer.data, status=status.HTTP_200_OK)

        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)


查看完整回答
反對 回復 2023-10-11
?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

您可以使用序列化程序的屬性read_only_fields 。

另一種方法是使用“每個操作的序列化器”


查看完整回答
反對 回復 2023-10-11
  • 3 回答
  • 0 關注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號