diff --git a/pairent_backend/pairent_app/admin.py b/pairent_backend/pairent_app/admin.py index e75d8f6..8e4556b 100644 --- a/pairent_backend/pairent_app/admin.py +++ b/pairent_backend/pairent_app/admin.py @@ -1,5 +1,6 @@ from django.contrib import admin -from .models import Apartament, Photo +from .models import Apartament, Photo, User admin.site.register(Apartament) admin.site.register(Photo) +admin.site.register(User) diff --git a/pairent_backend/pairent_app/migrations/0005_user_remove_apartament_isсhild_and_more.py b/pairent_backend/pairent_app/migrations/0005_user_remove_apartament_isсhild_and_more.py new file mode 100644 index 0000000..3b3d676 --- /dev/null +++ b/pairent_backend/pairent_app/migrations/0005_user_remove_apartament_isсhild_and_more.py @@ -0,0 +1,30 @@ +# Generated by Django 4.2.1 on 2023-05-08 16:44 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('pairent_app', '0004_apartament_lastprice'), + ] + + operations = [ + migrations.CreateModel( + name='User', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('favorites_apartaments', models.CharField(max_length=100, verbose_name='Избранные квартиры')), + ('apartaments_for_comparison', models.CharField(max_length=100, verbose_name='Квартиры для сравнения')), + ], + ), + migrations.RemoveField( + model_name='apartament', + name='isСhild', + ), + migrations.AlterField( + model_name='apartament', + name='isChild', + field=models.BooleanField(verbose_name='Можно с детьми'), + ), + ] diff --git a/pairent_backend/pairent_app/models.py b/pairent_backend/pairent_app/models.py index 4f6528e..b3e950c 100644 --- a/pairent_backend/pairent_app/models.py +++ b/pairent_backend/pairent_app/models.py @@ -77,4 +77,13 @@ class Photo(models.Model): class Meta: verbose_name = "Фотография" - verbose_name_plural = "Фотографии" \ No newline at end of file + verbose_name_plural = "Фотографии" + +class User(models.Model): + """Тестовая модель данных для избранных и сравнения""" + favorites_apartaments = models.CharField(max_length=100, verbose_name="Избранные квартиры") + apartaments_for_comparison = models.CharField(max_length=100, verbose_name="Квартиры для сравнения") + + class Meta: + verbose_name = "Пользователь" + verbose_name_plural = "Пользователи" \ No newline at end of file diff --git a/pairent_backend/pairent_app/urls.py b/pairent_backend/pairent_app/urls.py index 556c28e..8046550 100644 --- a/pairent_backend/pairent_app/urls.py +++ b/pairent_backend/pairent_app/urls.py @@ -6,5 +6,7 @@ from . import views urlpatterns = format_suffix_patterns([ path("apartaments/", views.ApartamentViewSet.as_view({'get': 'list'})), path("apartament//", views.ApartamentViewSet.as_view({'get': 'retrieve'})), - path("comparison/", views.ApartamentComparisonViewSet.as_view({'get': 'retrieve'})), + # TODO: доработать + path("apartaments/comparison/", views.ApartamentGetManyViewSet.as_view({'get': 'retrieve'})), # пример: apartaments/comparison/?user_id=1 user_id - id пользователя + path("apartaments/favorite/", views.ApartamentGetManyViewSet.as_view({'get': 'list'})), ]) diff --git a/pairent_backend/pairent_app/views.py b/pairent_backend/pairent_app/views.py index 34fd8db..1154dd4 100644 --- a/pairent_backend/pairent_app/views.py +++ b/pairent_backend/pairent_app/views.py @@ -2,7 +2,7 @@ from rest_framework import viewsets from rest_framework.response import Response from rest_framework.views import APIView -from .models import Apartament +from .models import Apartament, User from .serializer import (ApartamentListSerializer, ApartamentDetailSerializer) @@ -22,11 +22,61 @@ class ApartamentViewSet(viewsets.ReadOnlyModelViewSet): return ApartamentDetailSerializer -class ApartamentComparisonViewSet(viewsets.ReadOnlyModelViewSet): +# class ApartamentGetManyViewSet(viewsets.ViewSet): +# def retrieve(self, request): +# user_id = request.query_params.get("user_id", None) # получение id пользователя +# apartaments = [] +# apartaments_id = User.objects.get(pk=user_id).apartaments_for_comparison.split(',') # получение id квартир +# for i in apartaments_id: +# apartaments.append(ApartamentDetailSerializer(Apartament.objects.get(pk=i)).data) + +# return Response({'results': apartaments}) +# def list(self, request): +# pk = request.query_params.get("pk", None) # получение id пользователя +# apartaments = [] +# apartaments_id = User.objects.get(pk=pk).apartaments_for_comparison.split(',') # получение id квартир + + + +# TODO: доработать +class ApartamentGetManyViewSet(viewsets.ReadOnlyModelViewSet): """Вывод отдельных квартир для сравнения""" - def retrieve(self, request, *args, **kwargs): - apartaments_id = request.COOKIES["apartament_comparison_id"].split(',') # получение куки пример (123,453) - apartaments = [] + def get_queryset(self): + pk = self.request.query_params.get("pk", None) # получение id пользователя + queryset = [] + + if self.action == "retrieve": # если для страницы сравнения + apartaments_id = User.objects.get(pk=pk).apartaments_for_comparison.split(',') # получение id квартир + elif self.action == "list": # если для страницы избранного + apartaments_id = User.objects.get(pk=pk).favorites_apartaments.split(',') # получение id квартир + for i in apartaments_id: - apartaments.append(ApartamentDetailSerializer(Apartament.objects.get(pk=i)).data) - return Response({"results": apartaments}) \ No newline at end of file + queryset.append(Apartament.objects.get(pk=i)) + + return queryset + + serializer_class = ApartamentDetailSerializer + + # def retrieve(self, request, *args, **kwargs): + # pk = request.query_params.get("pk", None) # получение id пользователя + # apartaments = [] + # print(f"pk: {pk}") + + # if request.query_params.get("page") == "comparison": # если для страницы сравнения + # apartaments_id = User.objects.get(pk=pk).apartaments_for_comparison.split(',') # получение id квартир + # elif request.query_params.get("page") == "favorites": # если для страницы избранного + # apartaments_id = User.objects.get(pk=pk).favorites_apartaments.split(',') # получение id квартир + + # for i in apartaments_id: + # apartaments.append(ApartamentDetailSerializer(Apartament.objects.get(pk=i)).data) + + # return Response({"results": apartaments}) + + + + # def retrieve(self, request, *args, **kwargs): + # apartaments_id = request.COOKIES["apartament_comparison_id"].split(',') # получение куки пример (123,453) + # apartaments = [] + # for i in apartaments_id: + # apartaments.append(ApartamentDetailSerializer(Apartament.objects.get(pk=i)).data) + # return Response({"results": apartaments}) \ No newline at end of file