【问题标题】:Display fields from foreign key linked model django显示来自外键链接模型 django 的字段
【发布时间】:2019-10-23 07:07:56
【问题描述】:

所以我使用 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

如果需要更多代码来回答这个问题,请告诉我。谢谢!

【问题讨论】:

  • 显示您的序列化程序。
  • @DanielRoseman 我分享了我的连载和观点。还有什么要分享的吗?

标签: python django api


【解决方案1】:

你可以使用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' )

【讨论】:

  • 非常感谢!!这行得通。如果我想引用其他模型的字段,我会做同样的事情吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-13
  • 1970-01-01
  • 1970-01-01
  • 2012-09-01
相关资源
最近更新 更多