В модели 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', )

Надеюсь, это может помочь.

Вернуться на верх