Django Rest Framerowk将用户/所有者设置为ModelSerializer(Tweet)



我是DRF的新手。在创建twitter应用程序时,我遇到了序列化程序的问题。由于用户是必需的,我需要以某种方式将实际用户传递给TweetSerializer类。我尝试过不同的方法,但都不起作用。

这给了我一个错误

owner = serializers.HiddenField(default=serializers.CurrentUserDefault())

错误图像

错误图像继续

此外,我还试图通过将用户传递给序列化程序构造函数来使用它

serializer = TweetSerializer(owner=request.user)

也不起作用

class TweetSerializer(serializers.ModelSerializer):
try:
owner = serializers.HiddenField(
default=serializers.CurrentUserDefault()
)
except Exception as exception:
print(exception)

class Meta:
model = Tweet
fields = '__all__'
read_only_fields = ['owner']
def validate(self, attrs):
if len(attrs['content']) > MAX_TWEET_LENGTH:
raise serializers.ValidationError("This tweet is too long")
return attrs
class Tweet(models.Model):
id = models.AutoField(primary_key=True)
owner = models.ForeignKey('auth.User', related_name='tweets', on_delete=models.CASCADE)
content = models.TextField(blank=True, null=True)
image = models.FileField(upload_to='images/', blank=True, null=True)
class Meta:
ordering = ['-id']
@api_view(['POST'])
def tweet_create_view(request, *args, **kwargs):
serializer = TweetSerializer(data=request.POST)
user = request.user
if serializer.is_valid():
serializer.save()
else:
print(serializer.errors)
return JsonResponse({}, status=400)
try:
pass
except Exception as e:
print(str(e))
return JsonResponse({}, status=400, safe=False)
return JsonResponse({}, status=201)

解决方案是在我阅读CurrentUserDefault((的drf文档时传递上下文

@api_view(['POST'])
def tweet_create_view(request, *args, **kwargs):
context = {
"request" : request
}
serializer = TweetSerializer(data=request.POST, context=context)
if serializer.is_valid():
serializer.save()
return JsonResponse({}, status=201)
A default class that can be used to represent the current user. In order to use this, the 'request' must have been provided as part of the context dictionary when instantiating the serializer.

最新更新