繁体   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