Я сделал модель 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 и получить рекурсивный ответ на комментарий, используя сериализатор?
Спасибо!