python - 显示来自外键链接模型 django 的字段
问题描述
所以我用 Django rest 框架创建了一个 API。我有一个简单的模型关系,即用户->帖子。用户链接到帖子,因为用户是帖子的作者。我要做的就是在我的 REST API 中显示与 POST 关联的用户名。如何从作为外键链接的模型中引用其他字段?如果我有一个包含用户名、头像和电子邮件的用户模型,我如何在我的帖子模型中显示它们???
这是我尝试对模型进行的操作的示例
from django.contrib.auth.models import User
class Post(models.Model):
title = models.CharField(max_length=50)
content = models.TextField()
image = models.ImageField(default='default.mp4', upload_to='video_thumbnails')
videoFile = models.FileField(default='default.mp4', upload_to='videos')
date_posted = models.DateTimeField(default=timezone.now)
user = models.ForeignKey(User , #Something to get the username here, on_delete=models.CASCADE)
现在这显示
{
"title": "HOLROYD SWIPE ACCESS(CS ROOMS)",
"content": "Yeet",
"image": "http://127.0.0.1:8000/media/video_thumbnails/Screenshot_from_2019-08-03_23-37-50.png",
"videoFile": "http://127.0.0.1:8000/media/videos/Screenshot_from_2019-08-03_23-37-52.png",
"date_posted": "2019-10-22T21:01:07Z",
"user": 1
}
我想要它做的就是显示用户的名称,而不是在这种情况下为 1 的用户 ID。
我只是希望它看起来像这样
{
"title": "HOLROYD SWIPE ACCESS(CS ROOMS)",
"content": "Yeet",
"image": "http://127.0.0.1:8000/media/video_thumbnails/Screenshot_from_2019-08-03_23-37-50.png",
"videoFile": "http://127.0.0.1:8000/media/videos/Screenshot_from_2019-08-03_23-37-52.png",
"date_posted": "2019-10-22T21:01:07Z",
"user": "usernameassociatedwithpost"
}
这是我的序列化程序
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = ('title', 'content', 'image', 'videoFile', 'date_posted', 'user' )
这是我的views.py
class VideoList(generics.ListCreateAPIView):
queryset = Video.objects.all()
serializer_class = VideoSerializer
class VideoDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Video.objects.all()
serializer_class = VideoSerializer
如果需要更多代码来回答这个问题,请告诉我。谢谢!
解决方案
您可以使用SlugRelatedField:
class PostSerializer(serializers.ModelSerializer):
user = serializers.SlugRelatedField(slug_field="username", queryset=User.objects.all())
class Meta:
model = Post
fields = ('title', 'content', 'image', 'videoFile', 'date_posted', 'user' )
推荐阅读
- php - 在 PHP 中加密文本并在 Python 中解密
- android - 使用数据绑定时如何设置嵌套的回收器视图适配器?
- sql - 如何在 Wordpress 网站中插入自定义表单中的数据?
- node.js - NodeJs如何在主进程和子进程之间共享socket.io?
- .net-core - .net core xunit 测试项目中 Autofixture 的 AutoData 属性
- javascript - 如何从 moment.js 进行完整复制
- php - Carbon diffForHumans() 在日期时间上不起作用
- ios - 在单个单元格中显示页眉页脚和单元格?
- c# - 强制 WPF UI 线程更新任务
- jquery - 如何将变量添加到加载的文件