我有以下内容:
我正在使用基于 JWT token 的 DRF。
我想将一个实验与用户相关联,即当发布请求到达时,我希望能够使用发送请求的用户为作者所需的 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....
但是 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)
View.py:
filter_backends = [DjangoFilterBackend, filters.OrderingFilter]
serializer_class = ExperimentsSerializers
queryset = Experiments.objects.all()
filterset_fields = '__all__'
permission_classes = (permissions.IsAuthenticated,)
序列化器.py
class ExperimentsSerializers(serializers.ModelSerializer):
class Meta:
model = models.Experiments
fields = '__all__'
最佳答案
您可以使用 save
传递额外的数据参数:
def create(self, request, **kwargs):
serializer = ExperimentsSerializers(data=request.data)
if serializer.is_valid():
serializer.save(author=request.user)
请注意,您可能需要将 author
字段指定为 read_only
因此在请求正文中不需要:
class ExperimentsSerializers(serializers.ModelSerializer):
class Meta:
model = models.Experiments
fields = '__all__'
read_only_fields = ['author']
关于python - 如何将用户关联到 Django drf 中的发布请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60074984/