簡體   English   中英

如何將當前用戶添加到 django 模型序列化器的字段中

[英]How to add current user into a field in django model serializer

我正在 django-rest-framework 中開發一個應用程序。 以下是我的序列化程序:

class MySerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = My
        fields = ('user','title','description')

問題是當我運行它時,它要求像這樣選擇用戶:

在此處輸入圖片說明

我希望無論哪個用戶登錄,他都應該自動添加到用戶字段中。 在 django 網站開發中,我曾經使用request.user來做,但是我如何在 django rest 框架中做呢?

可用於表示當前用戶的默認類。 為了使用它,在實例化序列化程序時,“請求”必須作為上下文字典的一部分提供。

owner = serializers.HiddenField(
    default=serializers.CurrentUserDefault()
)

更多細節在這里: http : //www.django-rest-framework.org/api-guide/validators/#currentuserdefault

希望這會有所幫助

你會做類似的事情

MySerializer(serializers.HyperlinkedModelSerializer):
    user = serializers.ReadOnlyField()
    class Meta:
        model = My
        fields = ('user','title','description')

當您調用序列化程序時,您只需將當前用戶添加到序列化程序中,在 views.py 或在序列化程序創建方法中。

  1. 在views.py中

    serializer.save(user=request.user)

  2. 在序列化器創建方法中

    def create(self, validated_data): validated_data['user'] = request.user.id obj = ExampleModel.objects.create(**validated_data) return obj

如果您擴展 django 視圖通用類,那么您可以添加 views.py

from rest_framework.permissions import IsAuthenticate

class MyView(generics.ListCreateAPIView):
    permission_classes = (IsAuthenticated,)
    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

然后在 serializers.py

class MySerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = My
        fields = ('user','title','description')
        read_only_fields = ('user',) # Add this

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM