[英]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.