如何将用户与 Django drf 中的发布请求相关联

hel*_*per 2 python django django-models django-views django-rest-framework

我有以下几点:

我正在使用基于 DRF 的 JWT 令牌。我想将实验与用户相关联,即当发布请求到达时,我希望能够使用发送请求的用户为作者所需的 Foreginkey 保存该发布请求。POST 请求始终经过身份验证,从不匿名,即request.user始终存在(调试时可以看到)

我尝试添加以下内容

def create(self, request, **kwargs):
   request.data["author"] = request.user
   serializer = ExperimentsSerializers(data=request.data)
   if serializer.is_valid():
       serializer.save()
       return....

Run Code Online (Sandbox Code Playgroud)

is_valid返回总是 False (唯一一次 ts 为真,是当我从 ExperimentsSerializers 字段中取出作者时......

对任何线索都会感到高兴....

我的代码附在下面

模型.py

class User(AbstractUser):
    pass

    def __str__(self):
        return self.username

class Experiments(models.Model):
    name = models.CharField(max_length=40)
    time = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)

查看.py

filter_backends = [DjangoFilterBackend, filters.OrderingFilter]
serializer_class = ExperimentsSerializers
queryset = Experiments.objects.all()
filterset_fields = '__all__'
permission_classes = (permissions.IsAuthenticated,)
Run Code Online (Sandbox Code Playgroud)

序列化程序.py

class ExperimentsSerializers(serializers.ModelSerializer):
    class Meta:
        model = models.Experiments
        fields = '__all__'
Run Code Online (Sandbox Code Playgroud)

nev*_*ner 7

您可以只传递带有save参数的附加数据:

def create(self, request, **kwargs):
   serializer = ExperimentsSerializers(data=request.data)
   if serializer.is_valid():
       serializer.save(author=request.user)
Run Code Online (Sandbox Code Playgroud)

请注意,您可能需要指定author字段,read_only因此请求正文中不需要它:

class ExperimentsSerializers(serializers.ModelSerializer):
    class Meta:
        model = models.Experiments
        fields = '__all__'
        read_only_fields = ['author']
Run Code Online (Sandbox Code Playgroud)