Django 模型渲染数字而不是字符串

Django model rendering number instead of string

我正在创建一个博客网站,作者发布博客等。问题是呈现作者的名字,而不是 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 框架中它呈现一个数字,而它应该是 'admin' 用户:

[
{
        "title": "First Blog",
        "author": 1,
        "body": "Example blog text",
        "date_posted": "2022-05-18T23:55:21.529755Z"
    }
]

有点困惑,因为没有错误,只是没有渲染 'admin'。任何帮助都会有所帮助谢谢。

它显​​示了用户对象的主键,即存储在外键字段中的内容。

要遵循用户对象用户名(假设您没有用户序列化程序),您可以创建一个自定义字段,例如,

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

要获取完整的作者数据,您需要在 BlogSerializer 中添加 UserSerializer

class BlogSerializer(serializers.ModelSerializer):
    author = UserSerializer(read_only = True)

    class Meta:
        model = Blog
        fields = ('title', 'author', 'author_name', 'body', 'date_posted', )

希望对您有所帮助。