[英]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.