我正面臨着必須檢查用戶在串行器中登錄的不可避免的情況。它返回登錄的用戶是否有喜歡的帖子無法在序列化程序中使用self.request:任何方式來檢查序列化程序中的登錄用戶?
這裏是PostDetailView。
class PostDetailView(generics.RetrieveAPIView):
queryset = Outfit.objects.all()
serializer_class = PostDetailSerializer
lookup_field = 'pk'
這是它的串行
class PostDetailSerializer(serializers.ModelSerializer):
...
like_count = serializers.SerializerMethodField()
liked = serializers.SerializerMethodField()
...
class Meta:
model = Post
fields = (
...
'like_count',
'liked',
...
)
def get_liked(self, obj):
content_type = obj.get_content_type
object_id = obj.id
### Right Here! I can't get self.request.user;
my_like = Like.objects.filter_by_instance(obj).filter(user=self.request.user)
if my_like == 0:
return False
return True
# this is just an example
def get_like_count(self, obj):
content_type = obj.get_content_type
object_id = obj.id
like_count = Like.objects.filter_by_instance(obj).count()
return like_count
由於串行沒有request
屬性,我們不能將其導入。我該如何回覆帖子是否被喜歡?
更多信息:我有明確的Like
模型來存儲用戶的喜好
class Like(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
created_at = models.DateTimeField(auto_now=False, auto_now_add=True)
class Post(models.Model):
...
也許我可以使用的ModelManager來解決這個問題。但ModelManager也沒有request
!無奈... :(
您可以從串行訪問'request'一樣,'self.context ['request']' – zaidfazil