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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

強(qiáng)制只能在 Django 中使用 PUT 請(qǐng)求更改某些屬性

強(qiáng)制只能在 Django 中使用 PUT 請(qǐng)求更改某些屬性

BIG陽(yáng) 2023-10-11 22:48:33
我想讓用戶能夠在 Django Rest API 中使用 PUT 請(qǐng)求僅更新某些屬性。舉個(gè)例子,如果我有以下模型并且只希望用戶能夠更新他們的名字和姓氏,我將如何去做呢?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)(請(qǐng)注意,他們不應(yīng)該能夠更改自動(dòng)設(shè)置的“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)強(qiáng)制用戶只能更改這些屬性的子集的最佳方法是什么?
查看完整描述

3 回答

?
慕少森

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊

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


class UserSerializer(serializers.ModelSerializer):

    class Meta:

        model = User

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

        read_only_fields = ['id', 'email']

確保在 put 函數(shù)中將序列化器設(shè)置為部分:


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

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


查看完整回答
反對(duì) 回復(fù) 2023-10-11
?
PIPIONE

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超9個(gè)贊

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


# 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)


查看完整回答
反對(duì) 回復(fù) 2023-10-11
?
白衣非少年

TA貢獻(xiàn)1155條經(jīng)驗(yàn) 獲得超0個(gè)贊

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

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


查看完整回答
反對(duì) 回復(fù) 2023-10-11
  • 3 回答
  • 0 關(guān)注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)