[英]How to associate user to a post request in Django drf
我有以下几点:
我正在使用基于 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....
但是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)
查看.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']
另一种方法可以是使用
默认值设置为
CurrentUserDefault
HiddenField
这样,该字段将不会在当前用户可访问的同时公开,并且可以在该用户上下文上执行其他操作。
作者 = serializers.HiddenField(default=serializers.CurrentUserDefault())
像这样的东西:
class ExperimentsSerializers(serializers.ModelSerializer):
author = serializers.HiddenField(default=serializers.CurrentUserDefault())
class Meta:
model = models.Experiments
fields = '__all__'
参考 :
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.