В модели Django вместо строки отображается число
Я создаю сайт-блог с авторами, размещающими блоги и т.д. Проблема заключается в отображении имени автора, вместо этого django возвращает число.
Моя модель блога:
class Blog(models.Model):
title=models.CharField(max_length=255)
author=models.ForeignKey(User, on_delete=models.CASCADE)
date_posted=models.DateTimeField(auto_now_add=True)
body=models.TextField()
def __str__(self):
return self.title
И мой сериализатор:
class Meta:
model=Blog
fields=('title', 'author', 'body', 'date_posted')
Однако, в django rest framework он отображает число, когда это должен быть пользователь 'admin':
[
{
"title": "First Blog",
"author": 1,
"body": "Example blog text",
"date_posted": "2022-05-18T23:55:21.529755Z"
}
]
Немного запутался, так как ошибки нет, просто не отображается 'admin'. Любая помощь будет полезна, спасибо.
Он показывает первичный ключ объекта User, который и хранится в поле внешнего ключа.
Чтобы проследить это до имени пользователя объектов User (и предполагая, что у вас нет сериализатора User), вы можете создать пользовательское поле, например,
class Meta:
model=Blog
fields=('title', 'author', 'author_name', 'body', 'date_posted')
author_name = serializers.SerializerMethodField('get_author_name')
def get_author_name(self, obj):
return obj.author.username
Чтобы получить полные данные об авторе, необходимо добавить UserSerializer в BlogSerializer.
class BlogSerializer(serializers.ModelSerializer):
author = UserSerializer(read_only = True)
class Meta:
model = Blog
fields = ('title', 'author', 'author_name', 'body', 'date_posted', )
Надеюсь, это может помочь.