这样的模型:
class Album(models.Model):
artist = models.ForeignKey(Musician, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
release_date = models.DateField()
num_stars = models.IntegerField()
和序列化器:
class AlbumSerializers(serializers.ModelSerializer):
count=serializers.SerializerMethodField()
class Meta:
module=Album
fields=('__all__')
我只想知道如何在序列化程序中获取user.id
答案 0 :(得分:1)
Django REST框架的序列化程序使用上下文来保存这些东西。它用于在使用HyperlinkedSerializers时查找关联的主机名并记录here
默认情况下,通用视图会添加当前请求,这意味着您可以执行以下操作:
class AlbumSerializers(serializers.ModelSerializer):
count=serializers.SerializerMethodField()
class Meta:
module=Album
fields=('__all__')
def get_count(self,obj):
# Provided the user is logged:
user_id = self.context['request'].user.id
# Now do whatever with user_id
return
答案 1 :(得分:0)
首先要注意的是,您不能访问views
以外的请求。如果要访问请求,则必须传递上下文 explicilty,因为django rest框架隐式不会将请求传递给序列化程序。
class MyAPIView(APIView):
def get(self, request):
query_set = MyObjects.objects.all()
serializer = MySerializer(query_set,
context={'request': request},
many=True)
return Response(serializer.data)
注意:当您使用APIView
或任何其他基类视图时就是这种情况。但是如果ViewSets
您不必重写方法,Django Rest Framework将自动将request
发送到Serializer
类。我希望它能清除这个概念!
答案 2 :(得分:0)
Serializer:
class AlbumSerializers(serializers.ModelSerializer):
count=serializers.SerializerMethodField()
class Meta:
module=Album
fields=('__all__')
def get_count(self,obj):
request = self.context.get("request")
user_id = request.user.id
return