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