метод сериализации данных комментария (модели) с использованием родительского поля для получения ответа на комментарий в Django - PullRequest
1 голос
/ 26 марта 2020

Я сделал модель FoodComment таким образом в Django, используя Foreignkey. Он использует имя пользователя для указания пользователя, которому принадлежит комментарий, а еда - для меню, которое собирает комментарии пользователей. И родитель указывает на другой объект FoodComment, если это ответ на комментарий.

class FoodComment(models.Model):
    username = models.ForeignKey(Account, on_delete=models.CASCADE)
    food = models.ForeignKey(Food, on_delete=models.CASCADE)
    parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True)
    body = models.CharField(max_length=30)
    star = models.IntegerField(default=5)
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.food.menuname + ':' + self.username.username

У меня проблема с сериализатором, получающим данные jsoned комментариев с иерархией комментариев и таковой из ответов.

class FoodCommentList(APIView):
    serializer_class = CommentSerializer

    def get(self, request, foodname):
        food = Food.objects.get(menuname=foodname)
        data = FoodComment.objects.select_related('food').filter(food=food, parent=None)

        serialized = CommentSerializer(data, many=True)
        return Response(serialized.data, HTTP_200_OK)

Если я использую функцию FoodCommentList от views.py, как указано выше, REST возвращает serialized.data, как показано ниже.

[{"id":1,"body":"delicious!","star":5,"created":"2020-03-26T20:56:49.111307","username":2,"food":19,"parent":null}]

И использованный выше CommentSerializer выглядит следующим образом.

class CommentSerializer(serializers.ModelSerializer):

    class Meta:
        model = FoodComment
        fields = '__all__'

Что я пытаюсь сделать это не просто сериализация данных 'parent = None', но с родительским полем, я хочу получить json данные с комментарием, подобным этому, используя сериализатор.

{
   id:1,
   body:"delicious!",
   ...
   childs: {
             id:2,
             body:"ty!",
             ...
   }
]

Я пробовал код другими пользователями, но не смог ' Т решить это. Можно ли один раз вызвать CommentSerializer и получить рекурсивный ответ на комментарий, используя сериализатор?

Спасибо!

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