簡體   English   中英

創建相關模型時保存用戶外鍵

[英]Saving User foreign key upon creation of related model

我的Category模型與User有關,但是我找不到將登錄的用戶ID存儲到Category user_id字段中的方法。

Category models.py

class Category(models.Model):
    user = models.ForeignKey(User, default=None)
    name = models.CharField(max_length=32, unique=True)

views.py

class CategoryList(APIView):
    ...
    def post(self, request):
        """
        Create a new Category
        :param request:
        :return: Category
        """
        user_id = request.user.pk
        serializer = CategorySerializer(data=request.data)

        if serializer.is_valid():
            serializer.save()

            return Response(serializer.data, status=HTTP_201_CREATED)

        return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)

我可以訪問request.user.pk並看到正確顯示,但是我不知道在創建新類別時如何存儲該值。

要將當前用戶標識添加到新記錄,您可以將當前用戶作為save參數傳遞:

if serializer.is_valid():
    serializer.save(user=request.user)

或者,您可以更改序列化程序並使用CurrentUserDefault

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

來自文檔:

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

因此,要使用CurrentUserDefault,您需要在視圖中將請求傳遞給序列化器:

serializer = CategorySerializer(data=request.data, context={'request': request})

暫無
暫無

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

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