Почему мое поле сериализатора не отображается?

Прямо сейчас у меня нет проблем с отображением вывода полей. Но почему-то я не вижу вывод postlikes_set в выводе json. Я не получаю никаких ошибок или чего-то еще, я просто не вижу этого. Я не знаю почему. Кто-нибудь знает проблему? Вот мои коды.

Модель

class Article(models.Model):

    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    author = models.ForeignKey(User,on_delete=models.CASCADE,related_name='articles')
    caption = models.CharField(max_length=250)


class LikePostModel(models.Model):

    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    author = models.ForeignKey(User, unique=True, on_delete=models.CASCADE,related_name='postlikes',null=True)
    article = models.ForeignKey(Article,  on_delete=models.CASCADE)
    created = models.DateTimeField(auto_now=True)

Сериализатор

class LikePostViewSerializer(serializers.ModelSerializer):

    class Meta:
        model = LikePostModel
        fields = ('id',"author","article")

class ArticleViewSerializer(serializers.ModelSerializer):
    images_set = ArticleImageViewSerializer(source='images',required=False,many=True)
    comments_set = CommentViewSerializer(source='comments',required=False,many=True)
    postlikes_set = LikePostViewSerializer(source='postlikes',required=False,many=True)

    class Meta:
        model = Article
        fields = ('id','caption','images_set','comments_set','postlikes_set')

    def create(self, validated_data):
     return Article.objects.create(**validated_data)

Выход

[
    {
        "id": "092e929f-c845-403d-8373-84c745140c11",
        "caption": "caption",
        "images_set": [],
        "comments_set": []
    }
]

Можешь объяснить source='postlikes' ? Похоже, вы пытаетесь получить доступ к одному полю, когда вы должны обратиться к модели. Также вам не нужно переопределять метод create(), если вы ничего в нем не меняете.

Guillaume 22.12.2020 15:19

«Постлайки» имеют такую ​​же эффективность, как и «комментарии». Когда я удаляю «комментарии», комментарии не отображаются. Метод create() сейчас является наименее приоритетным.

umarbeyoglu 22.12.2020 15:24

Можете ли вы добавить модель статьи?

Guillaume 22.12.2020 15:25

добавил его. Вы можете взглянуть на него.

umarbeyoglu 22.12.2020 15:31

Не могли бы вы взглянуть на мой ответ и посмотреть, решит ли это вашу проблему?

Guillaume 22.12.2020 15:45
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
603
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы пытаетесь получить доступ к полю вашей модели LikePostModel, когда вашей моделью сериализатора является статья. Разница с «комментариями» заключается в том, что они относятся к полю вашей модели статьи.

Теперь я не знаю точно, какой JSON вы ожидаете, но это выведет поле автора (также известное как лайки) вашего LikePostModel внутри его сериализатора.

#models.py
class LikePostModel(models.Model):

    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    author = models.ForeignKey(User, unique=True, on_delete=models.CASCADE,related_name='postlikes',null=True)
    article = models.ForeignKey(Article,  on_delete=models.CASCADE, related_name='postlikes_set')
    created = models.DateTimeField(auto_now=True)

# serializers.py
class LikePostViewSerializer(serializers.ModelSerializer):

    class Meta:
        model = LikePostModel
        fields = ('id',"author","article")

class ArticleViewSerializer(serializers.ModelSerializer):
    images_set = ArticleImageViewSerializer(source='images',required=False,many=True)
    comments_set = CommentViewSerializer(source='comments',required=False,many=True)
    postlikes_set = LikePostViewSerializer(required=False,many=True)

    class Meta:
        model = Article
        fields = ('id','caption','images_set','comments_set','postlikes_set')

    def create(self, validated_data):
     return Article.objects.create(**validated_data)

Э-э, я пробовал это раньше. Все еще не работает.

umarbeyoglu 22.12.2020 15:46

Я изменил поле статьи LikePostModel в файле models.py. Вы можете посмотреть на это?

Guillaume 22.12.2020 15:50

Нет проблем, всегда думайте о том, к какой модели относится ваш сериализатор, и когда вы хотите использовать обратные отношения, лучше всего установить related_name в объекте ForeignKey.

Guillaume 22.12.2020 15:54

Я уже проявляю осторожность при поиске related_name, но установка исходного имени в сериализаторах всегда срабатывала. Думаю, это требовало дополнительной осторожности.

umarbeyoglu 22.12.2020 15:55

Другие вопросы по теме