【发布时间】:2021-07-06 14:04:25
【问题描述】:
问题
在我的模型中,我有字段作者,我想通过 UserModel 与通过 JWT 令牌进行身份验证的用户一起作为 ForeignKey 输入。我的 API 和 JWT 身份验证工作正常,但我不知道在后端的哪里设置 author = request.user。
我的代码:
apis.py
class AlarmstichworteCreateApi(ApiErrorsMixin, APIView):
permission_classes = [IsAuthenticated]
class InputSerializer(serializers.ModelSerializer):
author = UserListAPI.OutputSerializer(source='UserListAPI_set', many=True)
created = serializers.DateTimeField()
updated = serializers.DateTimeField()
name = serializers.CharField(max_length=100)
class Meta:
model = AlarmstichworteConfig
fields = (
'__all__'
)
def post(self, request, *args, **kwargs):
serializer = self.InputSerializer(data=request.data)
#! serializer = self.InputSerializer(data=request.data, author=request.user) # Try 1
serializer.is_valid(raise_exception=True)
create_alarmstichwort(**serializer.validated_data)
#! create_alarmstichwort(**serializer.validated_data, author=request.user) # Try 1
return Response(status=status.HTTP_201_CREATED)
services.py
def create_alarmstichwort(
*,
author: ForeignKey,
created: datetime,
updated: datetime,
name: str,
) -> AlarmstichworteConfig:
if AlarmstichworteConfig.objects.filter(id=id).exists():
raise ValidationError('Alarmstichwort existiert bereits')
alarmstichwort = AlarmstichworteConfig.objects.create(
author=author,
created=created,
updated=updated,
name=name,
)
alarmstichwort.full_clean()
alarmstichwort.save()
return alarmstichwort
如果有人可以帮助我,我会很高兴。非常感谢!
【问题讨论】:
-
为什么
create_alarmstichwort(**serializer.validated_data, author=request.user)不适合你?这就是我会使用的。 -
@schillingt 然后,当我发布 api 帖子时,我收到错误
"author": ["This field is required."]。
标签: django django-rest-framework django-views django-rest-framework-simplejwt