在创建相关模型时保存用户外键

时间:2017-07-08 07:39:29

标签: python django django-rest-framework

我的Category模型与User相关,但我找不到将登录用户的ID存储到user_id中的Category字段的方法。

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并看到它已正确显示,但我无法弄清楚在创建新类别时如何存储此值。

1 个答案:

答案 0 :(得分:1)

要将当前用户ID添加到新记录,您可以将当前用户作为save参数传递:

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

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

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

来自docs:

  

可用于表示当前用户的默认类。为了使用它,在实例化序列化器时,'request'必须作为上下文字典的一部分提供。

因此,要使用CurrentUserDefault,您需要在视图中将请求传递给序列化程序:

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