python - 如何将用户关联到 Django drf 中的发布请求

标签 python django django-models django-rest-framework django-views

我有以下内容:

我正在使用基于 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/

相关文章:

python - Django - 使 ModelForm(属于 ImageField)只接受某些类型的图像

python - 打印时看不到的字符

python - 将 CSV 文件转换为 TF 记录

python - django modelchoicefield 与未保存的模型

python - 限制 django 应用程序模型中的单个记录?

python - 使用 API 而不是数据库的 Django 模型

python - 使用 python 查找频繁的字符串模式

Python - ThreadPoolExecutor 阻塞。如何解锁

python - 从请求中发送到 django 应用程序的 url 下载文件

mysql - Django 日期时间字段自动添加 7 小时