简体   繁体   English

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

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

My Category model is related to User , but I can't find a way to store the logged in user's id into user_id field in Category . 我的Category模型与User有关,但是我找不到将登录的用户ID存储到Category user_id字段中的方法。

Category models.py : Category models.py

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

views.py : 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)

I can access request.user.pk and see it's correctly shown, but I can't figure out how I can store this value when creating a new category. 我可以访问request.user.pk并看到正确显示,但是我不知道在创建新类别时如何存储该值。

To add current user id to new record you can pass current user as save argument: 要将当前用户标识添加到新记录,您可以将当前用户作为save参数传递:

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

Or you can change serializer and use CurrentUserDefault : 或者,您可以更改序列化程序并使用CurrentUserDefault

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

from docs: 来自文档:

A default class that can be used to represent the current user. 可用于表示当前用户的默认类。 In order to use this, the 'request' must have been provided as part of the context dictionary when instantiating the serializer. 为了使用此功能,在实例化序列化程序时,必须已将“请求”作为上下文字典的一部分提供。

So to use CurrentUserDefault you need to pass request to serializer in view: 因此,要使用CurrentUserDefault,您需要在视图中将请求传递给序列化器:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM