Отображение полей из связанной модели внешнего ключа django - PullRequest
0 голосов
/ 23 октября 2019

Итак, я создал API с каркасом отдыха Django. У меня есть простая модель отношений, которая, Пользователь -> Сообщения. Пользователи связаны с сообщениями, потому что пользователь является автором сообщения. Все, что я хочу сделать, это отобразить имя пользователя, связанное с POST, в моем 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.

Я просто хочу, чтобы это выглядело так

 {
        "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

Если для ответа на этот вопрос потребуется дополнительный код, пожалуйста, дайте мне знать. Спасибо!

1 Ответ

0 голосов
/ 23 октября 2019

Вы можете использовать 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' )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...