Как объединить два объекта rest api в django rest framwork?

#json #django #python-3.x #django-rest-framework #django-views

#json #django #python-3.x #django-rest-framework #django-просмотры

Вопрос:

Это мой views.py файл

 class NewsChannelListView(ObjectMultipleModelAPIView):

    def get_querylist(self, *args, **kwargs):
        userId = self.request.user.id
        queryset = [
            {'queryset': News_Channel.objects.all(),
             'serializer_class': NewsChannelSerializers},
            {'queryset': Count.objects.filter(userId=userId),
             'serializer_class': CountSerializers},
        ]
        return queryset
  

Я получаю следующий ответ от моих представлений this

 {
    "News_Channel": [
        {
            "id": 2,
            "name": "Republic",
            "info": "Arnab Goswami News channel",
            "image": "https://fourthpillar-static.s3.amazonaws.com/media/repiblic_1bRFWNZ.png",
            "website": "https://www.repu",
            "total_star": 10,
            "total_user": 2
        },
        {
            "id": 1,
            "name": "NDTV",
            "info": "India News Media",
            "image": "https://fourthpillar-static.s3.amazonaws.com/media/ndtv_WH67OhA.png",
            "website": "https://ndtv.com",
            "total_star": 18,
            "total_user": 2
        }
    ],
    "Count": [
        {
            "userId": 1,
            "channelId": 2,
            "rate": 6
        },
        {
            "userId": 1,
            "channelId": 1,
            "rate": 8
        }
    ]
}
  

Есть ли какой-либо способ получить один объект.Идентификатор канала 2 в графе сливается с идентификатором 2 в новостном канале, а идентификатор канала 1 в графе сливается с идентификатором 1 в новостном канале. Итак, окончательный ответ должен быть таким

 {
    "News_Channel": [
        {
            "id": 2,
            "name": "Republic",
            "info": "Arnab Goswami News channel",
            "image": "https://fourthpillar-static.s3.amazonaws.com/media/repiblic_1bRFWNZ.png",
            "website": "https://www.repu",
            "total_star": 10,
            "total_user": 2,
            "userId": 1,
            "rate": 6
        },
        {
            "id": 1,
            "name": "NDTV",
            "info": "India News Media",
            "image": "https://fourthpillar-static.s3.amazonaws.com/media/ndtv_WH67OhA.png",
            "website": "https://ndtv.com",
            "total_star": 18,
            "total_user": 2,
            "userId": 1,
            "rate": 8
        }
    ],
}
  

Код модели

 class News_Channel(models.Model):
    name = models.TextField(blank=False)
    info = models.TextField(blank=False)
    image = models.FileField()
    website = models.TextField()
    total_star = models.PositiveIntegerField(default=0)
    total_user = models.IntegerField()

    class Meta:
        ordering = ["-id"]

    def __str__(self):
        return self.name


class Count(models.Model):
    userId = models.ForeignKey(User, on_delete=models.CASCADE)
    channelId = models.ForeignKey(News_Channel, on_delete=models.CASCADE)
    rate = models.PositiveIntegerField(default=0)

    class Meta:
        ordering = ["-id"]
  

Я использую django 2.1.7 и djangorestframework ==3.9.2.

Комментарии:

1. В этом случае вы должны были использовать обычное представление DRF…. Я думаю

2. кроме того, вы могли бы переопределить format_results() метод класса view

3. Не могли бы вы поделиться некоторыми материалами, связанными с этим, или можете изменить представление в ответе.

4. Возможно, вы сможете использовать annotate() вызов, а затем SerializerMethodField показать его в NewsChannelSerializer классе. Если вы опубликуете свои модели, я могу помочь с этим.

5. @schillingt готово. Пожалуйста, проверьте модель сейчас в вопросе. Спасибо за ваш ответ