Прямо сейчас у меня нет проблем с отображением вывода полей. Но почему-то я не вижу вывод 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": []
}
]
«Постлайки» имеют такую же эффективность, как и «комментарии». Когда я удаляю «комментарии», комментарии не отображаются. Метод create() сейчас является наименее приоритетным.
Можете ли вы добавить модель статьи?
добавил его. Вы можете взглянуть на него.
Не могли бы вы взглянуть на мой ответ и посмотреть, решит ли это вашу проблему?
Вы пытаетесь получить доступ к полю вашей модели 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)
Э-э, я пробовал это раньше. Все еще не работает.
Я изменил поле статьи LikePostModel в файле models.py. Вы можете посмотреть на это?
Нет проблем, всегда думайте о том, к какой модели относится ваш сериализатор, и когда вы хотите использовать обратные отношения, лучше всего установить related_name в объекте ForeignKey.
Я уже проявляю осторожность при поиске related_name, но установка исходного имени в сериализаторах всегда срабатывала. Думаю, это требовало дополнительной осторожности.
Можешь объяснить
source='postlikes'
? Похоже, вы пытаетесь получить доступ к одному полю, когда вы должны обратиться к модели. Также вам не нужно переопределять метод create(), если вы ничего в нем не меняете.