@ooker

Объединение двух разных моделей в один запрос?

Добрый день!
Недавно работаю с Rest Framework.
Нужно объединить в один запрос на главную страницу две модели статей:
модели
"""1"""
class NewArticle(models.Model):
    date = models.DateTimeField(u'Дата публикации', auto_now=True)  # дата публикации
    """ОСТАЛЬНОЕ"""




"""2"""
class MasterAndSalonArticle(models.Model):
    date = models.DateTimeField(u'Дата публикации', auto_now=True)  # дата публикации
   """ОСТАЛЬНОЕ"""
    link = models.ForeignKey(MasterAndSalon, on_delete=models.CASCADE, verbose_name="Выбор")


        

серилайзер
class NewArticleSerialazer(serializers.ModelSerializer):
    yuotube_change = serializers.CharField(source='video_change', read_only=True)
    date_time = serializers.CharField(source='time', read_only=True)
    class Meta():
        model = NewArticle
        fields = '__all__'


class MasterAndSalonArticleSerialaser(serializers.ModelSerializer):
    masterandsalon = MasterAndSalonSerialaser(read_only=True,many=True)

    class Meta:
        model = MasterAndSalonArticle
        fields = '__all__'


class FiltersSerializers(serializers.Serializer):
    newarticle = NewArticleSerialazer(read_only=True, many=True)
    ms = MasterAndSalonArticleSerialaser(read_only=True, many=True)


view (первый вариант)
class NewArticleAndMSSerilaizerView(generics.ListAPIView):
    serializer_class = FiltersSerializers

    def get_queryset(self):
        newarticle = NewArticle.objects.all()
        ms = MasterAndSalonArticle.objects.select_related('link')
        result_list = sorted(
            chain(newarticle, ms),
            key=attrgetter('date'), reverse=True)
        return result_list

view (второй вариант)
class NewArticleAndMSSerilaizerView(APIView):
       def get(self, request, *args, **kwargs):
           filters = {'newarticle': NewArticle.objects.all().order_by('-date'), 'ms': MasterAndSalonArticle.objects.all().order_by('-date')}
           serializer = FiltersSerializers(filters)
          return Response(serializer.data, status=HTTP_200_OK)

Результат первого вью
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

[
    {},
    {},
    {}
]
Результат второго  вью 
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "newarticle": [
        {
            "id": 2,
            "yuotube_change": "https://www.youtube.com/embed/jtr2q0GRDGA",
            "date_time": "2021-05-04 01:56",
            "date": "2021-05-04T01:56:06.024604Z",
            "choice": "НОВОСТИ КРАСОТЫ",
            "title": "8 ошибок в макияже, которые превращают красотку в тетю Мотю из сельского ДК Источник",
            "title_g": "",
            "image_field": null,
            "image_field_g": null,
            "image_link": "",
            "video_youtube": "https://www.youtube.com/watch?v=jtr2q0GRDGA",
            "video_metacafe": "",
            "video_facebook": "",
            "video_instagram": "",
            "video_tik_tok": "",
            "video_tumbler": "",
            "video_tumbler_poster": "",
            "video_dzen": "",
            "video_twitter": "",
            "video_reddit": "",
            "video_pinterest": "",
            "video_link": "https://novate.ru/blogs/180421/58543/",
            "video_mp4": null,
            "video_poster": null,
            "sait_logo_link": "",
            "video_canal": "novate",
            "video_canal_link": "",
            "video_canal_image_link": "",
            "video_canal_image": null,
            "main_page_text": "Несмотря на то, что сейчас в интернете можно найти огромное количество видеоуроков и мастер-классов по макияжу, все равно многие девушки продолжают допускать банальные ошибки в подборе и процедуре нанесения косметики. Novate.ru предлагает разобраться с основными промахами и узнать, как их избегать.",
            "content": "",
            "insta_media_1": "",
            "content_video_youtube": "",
            "content_video_metacafe": "",
            "content_video_facebook": "",
            "content_video_instagram": "",
            "content_video_tik_tok": "",
            "content_video_tumbler": "",
            "content_video_tumbler_poster": "",
            "content_video_dzen": "",
            "content_video_twitter": "",
            "content_video_reddit": "",
            "content_video_pinterest": "",
            "content_1": "",
            "content_1_instagram": "",
            "content_2": "",
            "content_2_instagram": "",
            "meta_description": "dfasfddfasdfas",
            "meta_keywords": "dfasdfasdfasdfas",
            "views": 0,
            "slug": "article2"
        },
        {
            "id": 1,
            "yuotube_change": "",
            "date_time": "2021-05-03 23:12",
            "date": "2021-05-03T23:12:03.187826Z",
            "choice": "НОВОСТИ КРАСОТЫ",
            "title": "12 стандартов женской красоты, которые в корне отличаются в разных странах мира",
            "title_g": "",
            "image_field": null,
            "image_field_g": null,
            "image_link": "https://novate.ru/files/u40607/4060781086.jpg",
            "video_youtube": "",
            "video_metacafe": "",
            "video_facebook": "",
            "video_instagram": "",
            "video_tik_tok": "",
            "video_tumbler": "",
            "video_tumbler_poster": "",
            "video_dzen": "",
            "video_twitter": "",
            "video_reddit": "",
            "video_pinterest": "",
            "video_link": "https://novate.ru/blogs/150421/58597/",
            "video_mp4": null,
            "video_poster": null,
            "sait_logo_link": "https://novate.ru/media/logo.png",
            "video_canal": "novate",
            "video_canal_link": "",
            "video_canal_image_link": "",
            "video_canal_image": null,
            "main_page_text": "Каждая женщина, безусловно, красива. Этот постулат сегодня, в эпоху толерантности и все большего ухода от общепринятых еще пару десятилетий назад стандартов, кажется совершенно логичным. Однако это вовсе не значит, что на территории каждой страны или региона не продолжает бытовать свое, совершенно уникальное мнение относительно того, как должны выглядеть живущие там представительницы прекрасной половины человечества, ведь местные особенности формировались порой на протяжении столетий. А потому в разных государствах они бывают абсолютно противоположными. Вашему вниманию 12 стран с национальными стандартами женской красоты.\r\nИсточник: https://novate.ru/blogs/150421/58597/",
            "content": "",
            "insta_media_1": "",
            "content_video_youtube": "",
            "content_video_metacafe": "",
            "content_video_facebook": "",
            "content_video_instagram": "",
            "content_video_tik_tok": "",
            "content_video_tumbler": "",
            "content_video_tumbler_poster": "",
            "content_video_dzen": "",
            "content_video_twitter": "",
            "content_video_reddit": "",
            "content_video_pinterest": "",
            "content_1": "",
            "content_1_instagram": "",
            "content_2": "",
            "content_2_instagram": "",
            "meta_description": "rerere",
            "meta_keywords": "ererrere",
            "views": 0,
            "slug": "article"
        }
    ],
    "ms": [
        {
            "id": 1,
            "date": "2021-05-06T11:55:38.308224Z",
            "title": "12 стандартов женской красоты, которые в корне отличаются в разных странах мира",
            "image": "/media/ms/article/2021/05/06/8f4ba6309e954be576dc847dd3f26426.jpg",
            "text": "<p><img alt=\"yes\" src=\"http://127.0.0.1:8000/static/ckeditor/ckeditor/plugins/smiley/images/thumbs_up.png\" style=\"height:23px; width:23px\" title=\"yes\" /><img alt=\"yes\" src=\"http://127.0.0.1:8000/static/ckeditor/ckeditor/plugins/smiley/images/thumbs_up.png\" style=\"height:23px; width:23px\" title=\"yes\" /><img alt=\"angel\" src=\"http://127.0.0.1:8000/static/ckeditor/ckeditor/plugins/smiley/images/angel_smile.png\" style=\"height:23px; width:23px\" title=\"angel\" /></p>",
            "views": 0,
            "link": 1
        }
    ]
}

В итоге во Vue.js вывожу цикл только статей из первой модели, то есть сортировка не происходит.
Перепахал весь интернет ничего похожего нет, шаблонизатор джанго удобен, там легко вывести данные.
В данном случае все сложно.
Может кто нибудь скинет ссылку с похожим ответом
Спасибо!
  • Вопрос задан
  • 69 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы