Я работаю над проектом django, и у меня есть модель, которая выглядит следующим образом:
class Comment(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1,on_delete=models.CASCADE)
slug = models.SlugField(unique=True,null=True, blank=True)
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
parent = models.ForeignKey("self", null=True, blank=True,on_delete=models.CASCADE)
content = models.TextField()
timestamp = models.DateTimeField(auto_now_add=True)
objects = CommentManager()
def __str__(self):
return str(self.user.username)
Я использую этот сериализатор:
class CommentDetailSerializer(ModelSerializer):
user = SerializerMethodField()
replies = SerializerMethodField()
class Meta:
model = Comment
fields = [
'user',
'content',
'replies',
'timestamp'
]
def get_user(self,obj):
return str(obj.user.username)
def get_replies(self,obj):
if obj.is_parent:
return CommentChildSerializer(obj.children(),many=True).data
для этого вида:
class CommentDetailApiView(RetrieveAPIView):
queryset = Comment.objects.all()
serializer_class = CommentDetailSerializer
lookup_field = 'slug'
вот PostSerializer, который я использую,
class PostSerializer(ModelSerializer):
user = SerializerMethodField()
comments = SerializerMethodField()
class Meta:
model = Post
fields = [
'user',
'title',
'content',
'comments'
]
def get_user(self,obj):
return str(obj.user.username)
def get_comments(self,obj):
comments_qs = Comment.objects.filter_by_instance(obj)
comments = CommentSerializer(comments_qs, many=True).data
return comments
это то, что я получаю в PostDetailAPIView:
{
"user": "abc",
"title": "blabla",
"content": "bla",
"comments": [
{
"user": 1,
"content": "hey",
"timestamp": "2020-02-18T00:07:29.932850Z"
}
]
}
Как получить имя пользователя комментария вместо его идентификатора?
Я получаю имя пользователя комментария только в CommentDetailApiView
.
Спасибо