From 5183788ce8b468fd2cd3a0498b3a073626c70f8d Mon Sep 17 00:00:00 2001 From: Pavel Drovnin Date: Tue, 5 Mar 2024 03:14:34 +0300 Subject: [PATCH 1/9] edit absatract models --- backend/ambassadors/models.py | 30 ++++++++++++++---------------- backend/users/models.py | 15 ++++++++------- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/backend/ambassadors/models.py b/backend/ambassadors/models.py index de871b3..253e200 100644 --- a/backend/ambassadors/models.py +++ b/backend/ambassadors/models.py @@ -14,20 +14,9 @@ User = get_user_model() -class AbstractAmbassador(AbstractUser): - """Абстрактная модель амбассадора с полями Имя, Фамилия, Отечство, - Почта, Телефон, Телеграм.""" - - tg_acc = models.CharField( - verbose_name="Телеграмм аккаунт", max_length=150, unique=True - ) - - class Meta: - abstract = True - - class AbstractAmbassadorAddress(models.Model): - """Абстрактный класс для адреса амбассадора.""" + """Абстрактный класс для адреса амбассадора. + Поля: country, city, street_home, post_index""" country = models.CharField(verbose_name="Страна", max_length=100) city = models.CharField(verbose_name="Город", max_length=100) @@ -57,11 +46,17 @@ def __str__(self) -> str: return str(self.title) -class Ambassador(AbstractAmbassador): +class Ambassador(AbstractUser): """ Модель амбассадора. + Поля абстракта: first_name, last_name, middle_name, phone """ - + email = models.CharField( + verbose_name="Электронная почта", + max_length=200, + blank=False, + unique=True, + ) gender = models.CharField( verbose_name="Пол", max_length=20, choices=Gender.choices ) @@ -79,6 +74,9 @@ class Ambassador(AbstractAmbassador): created = models.DateTimeField( verbose_name="Дата и время создания", default=timezone.now ) + tg_acc = models.CharField( + verbose_name="Телеграмм аккаунт", max_length=150, unique=True + ) tg_id = models.IntegerField( verbose_name="Телеграмм id", blank=True, null=True ) @@ -162,7 +160,7 @@ class Meta: def __str__(self) -> str: return ( - f"{self.country} {self.city} {self.street_home} {self.post_index}" + f"{self.country} {self. city} {self.street_home} {self.post_index}" ) diff --git a/backend/users/models.py b/backend/users/models.py index ad64e37..701e4a7 100644 --- a/backend/users/models.py +++ b/backend/users/models.py @@ -8,14 +8,9 @@ class AbstractUser(models.Model): """Абстрактная модель User для наследования с полями Имя, Фамилия, Отечство, - Почта, Телефон.""" + Телефон. + Поля абстракта: first_name, last_name, middle_name, phone""" - email = models.CharField( - verbose_name="Электронная почта", - max_length=200, - blank=False, - unique=True, - ) first_name = models.CharField( verbose_name="Имя", max_length=100, blank=False ) @@ -43,6 +38,12 @@ class User(AbstractBaseUser, AbstractUser, PermissionsMixin): USERNAME_FIELD = "email" REQUIRED_FIELDS = ("first_name", "last_name", "phone") + email = models.CharField( + verbose_name="Электронная почта", + max_length=200, + blank=False, + unique=True, + ) is_staff = models.BooleanField( "Стафф статус", default=False, From 370421e9c23f2461aebe873d7ffd324af2671abe Mon Sep 17 00:00:00 2001 From: Pavel Drovnin Date: Tue, 5 Mar 2024 03:16:04 +0300 Subject: [PATCH 2/9] edit order model --- backend/orders/models.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/backend/orders/models.py b/backend/orders/models.py index 74751a5..99d4888 100644 --- a/backend/orders/models.py +++ b/backend/orders/models.py @@ -3,18 +3,18 @@ from ambassadors.choices import AmbassadorsClothesSizes, AmbassadorsFootsSizes from ambassadors.models import ( - AbstractAmbassador, AbstractAmbassadorAddress, Ambassador, ) +from users.models import AbstractUser class OrderStatus(models.TextChoices): """Список статусов заказа""" - CREATED = "создано", "created" - DELIVERED = "доставлено", "delivered" - SHIPPED = "отправлено", "shipped" + CREATED = "created", "Создано" + DELIVERED = "delivered", "Доставлено" + SHIPPED = "shipped", "Отправлено" class Merch(models.Model): @@ -48,10 +48,10 @@ def __str__(self): return f"{self.name} ({self.size})" -class Order(AbstractAmbassador, AbstractAmbassadorAddress): +class Order(AbstractUser, AbstractAmbassadorAddress): """Модель для заявки на мерч""" - ambassador_id = models.ForeignKey( + ambassador = models.ForeignKey( Ambassador, related_name="orders", verbose_name="ID амбассадора", @@ -62,7 +62,7 @@ class Order(AbstractAmbassador, AbstractAmbassadorAddress): related_name="order", verbose_name="Мерч в заявке", ) - order_status = models.CharField( + status = models.CharField( verbose_name="Статус заявки", choices=OrderStatus.choices, default=OrderStatus.CREATED, @@ -73,6 +73,9 @@ class Order(AbstractAmbassador, AbstractAmbassadorAddress): delivered_date = models.DateField( verbose_name="Дата получения заказа", null=True, blank=True ) + post_index = models.IntegerField( + verbose_name="Индекс", blank=True, null=True + ) track_number = models.CharField( verbose_name="Трек-номер", max_length=20, @@ -89,10 +92,8 @@ class Order(AbstractAmbassador, AbstractAmbassadorAddress): MinValueValidator(0, "Стоимость не может быть отрицательной") ], null=True, - blank=True, + default=0 ) - email = models.CharField(verbose_name="Электронная почта", max_length=200) - tg_acc = models.CharField(verbose_name="Телеграмм аккаунт", max_length=150) class Meta: verbose_name = "Заявка на отправку мерча" From 47b8be3290c655321bb4f51c41e6fa8029e1561d Mon Sep 17 00:00:00 2001 From: Pavel Drovnin Date: Tue, 5 Mar 2024 03:24:05 +0300 Subject: [PATCH 3/9] add serializer AllOrdersListSerialiazer and AmbassadorShortSerializer --- backend/orders/admin.py | 8 ++-- backend/orders/serializers.py | 69 +++++++++++++++++++++++++++++++---- backend/orders/views.py | 14 +++++-- 3 files changed, 76 insertions(+), 15 deletions(-) diff --git a/backend/orders/admin.py b/backend/orders/admin.py index a3c8c92..a9f91c6 100644 --- a/backend/orders/admin.py +++ b/backend/orders/admin.py @@ -17,23 +17,21 @@ class OrderAdmin(admin.ModelAdmin): "first_name", "last_name", "middle_name", - "email", "phone", - "tg_acc", "country", "city", "street_home", "post_index", "full_address", - "order_status", + "status", "created_date", "delivered_date", "track_number", "comment", "total_cost", ) - search_fields = ("ambassador_id", "merch", "order_status", "city") - list_filter = ("ambassador_id", "merch", "order_status", "city") + search_fields = ("ambassador_id", "merch", "status", "city") + list_filter = ("ambassador_id", "merch", "status", "city") empty_value_display = "-пусто-" def get_merch(self, obj: Order) -> str: diff --git a/backend/orders/serializers.py b/backend/orders/serializers.py index 43fbe53..a4454e3 100644 --- a/backend/orders/serializers.py +++ b/backend/orders/serializers.py @@ -21,12 +21,26 @@ class OrderSerializer(serializers.ModelSerializer): class Meta: model = Order - fields = "__all__" + fields = ( + "id", + "first_name", + "last_name", + "middle_name", + "phone", + "merch", + "status", + "created_date", + "track_number", + "city", + "street_home", + "post_index", + "comment", + ) read_only_fields = ( - "ambassador_id", + "ambassador", "created_date", - "order_status", "merch", + "total_cost", ) def get_merch(self, obj: Order): @@ -47,11 +61,11 @@ def create(self, validated_data: dict): return order def update(self, instance: Order, validated_data: dict) -> Order: - validate_editing_order(instance.order_status) + validate_editing_order(instance.status) merch_data = validated_data.pop("merch", None) # Проверка отсутствие трек-номера у заказа if validated_data.get("track_number") and not instance.track_number: - validated_data["order_status"] = OrderStatus.SHIPPED + validated_data["status"] = OrderStatus.SHIPPED instance = super().update(instance, validated_data) if merch_data: instance.merch.clear() @@ -67,6 +81,44 @@ def to_representation(self, instance: Order): return instance +class AmbassadorShortSerializer(serializers.ModelSerializer): + """Сериалайзер для отображения короткого списка полей амбассадора""" + + ya_programm = serializers.SerializerMethodField() + + class Meta: + model = Ambassador + fields = ( + "id", + "image", + "first_name", + "last_name", + "middle_name", + "status", + "tg_acc", + "ya_programm" + ) + + def get_ya_programm(self, obj): + return obj.ya_programm.title + + +class AllOrdersListSerialiazer(serializers.ModelSerializer): + """Сериалайзер для отображения всех существующих заявок""" + + ambassador = AmbassadorShortSerializer() + + class Meta: + model = Order + fields = ( + "id", + "ambassador", + "track_number", + "created_date", + "status", + ) + + class OrderListSerializer(serializers.ModelSerializer): """ Сериалайзер для всех заявок на мерч по @@ -87,6 +139,7 @@ class AmbassadorOrderListSerializer(serializers.ModelSerializer): orders = OrderListSerializer(many=True) total_orders_cost = serializers.SerializerMethodField() city = serializers.SerializerMethodField() + ya_programm = serializers.SerializerMethodField() class Meta: model = Ambassador @@ -97,14 +150,16 @@ class Meta: "last_name", "middle_name", "city", - "education", - "tg_acc", + "ya_programm", "email", "phone", "orders", "total_orders_cost", ) + def get_ya_programm(self, obj): + return obj.ya_programm.title + def get_city(self, obj: Ambassador) -> str: return obj.address.city diff --git a/backend/orders/views.py b/backend/orders/views.py index cb395d9..7e1fe0f 100644 --- a/backend/orders/views.py +++ b/backend/orders/views.py @@ -1,6 +1,7 @@ from django.db.models import Count, F, QuerySet, Sum from django.shortcuts import get_object_or_404 -from drf_spectacular.utils import extend_schema, extend_schema_view +from django_filters.rest_framework import DjangoFilterBackend +from drf_spectacular.utils import extend_schema_view from rest_framework import viewsets from rest_framework.request import Request from rest_framework.response import Response @@ -18,6 +19,7 @@ from orders.models import Merch, Order from orders.serializers import ( AllMerchToAmbassadorSerializer, + AllOrdersListSerialiazer, AmbassadorOrderListSerializer, MerchSerializer, OrderSerializer, @@ -53,7 +55,7 @@ def perform_create(self, serializer: Serializer, merch: Merch) -> None: ambassador = get_object_or_404( Ambassador, pk=self.kwargs["ambassador_id"] ) - serializer.validated_data["ambassador_id"] = ambassador + serializer.validated_data["ambassador"] = ambassador serializer.save(merch=merch) def get_serializer_class(self): @@ -69,9 +71,15 @@ class OrdersViewSet(viewsets.ModelViewSet): queryset = Order.objects.all() serializer_class = OrderSerializer http_method_names = ["get", "patch", "delete"] + filter_backends = [DjangoFilterBackend] + filterset_fields = ["ambassador__id", "status"] + + def list(self, request: Request, *args, **kwargs) -> Response: + queryset = self.filter_queryset(self.get_queryset()) + serializer = AllOrdersListSerialiazer(queryset, many=True) + return Response(serializer.data) -@extend_schema(tags=["Мерч"]) @extend_schema_view(**merch_extend_schema_view) class MerchViewSet(viewsets.ReadOnlyModelViewSet): """ViewSet для мерча""" From 0f12f09440616681bcefb60b5a06331d1db6878c Mon Sep 17 00:00:00 2001 From: Pavel Drovnin Date: Tue, 5 Mar 2024 03:24:17 +0300 Subject: [PATCH 4/9] edit openapi schema --- backend/openapi/orders_schema.py | 51 +++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 11 deletions(-) diff --git a/backend/openapi/orders_schema.py b/backend/openapi/orders_schema.py index 3ca2c46..cb5d4ff 100644 --- a/backend/openapi/orders_schema.py +++ b/backend/openapi/orders_schema.py @@ -9,10 +9,11 @@ AmbassadorOrderListSerializer, MerchSerializer, OrderSerializer, + AllOrdersListSerialiazer ) merch_example = {"name": "string", "size": "XS"} -order_request_example = { +order_one_request_example = { "first_name": "string", "last_name": "string", "middle_name": "string", @@ -21,15 +22,38 @@ "city": "string", "street_home": "string", "post_index": 2147483647, + "merch": [merch_example], + "comment": "string", +} +order_two_request_example = { + **order_one_request_example, "delivered_date": "2024-02-29", "track_number": "string", - "comment": "string", +} +order_response_example = { + "id": 0, + "ambassador": 0, + "created_date": "2024-02-29", + "status": "string", "total_cost": 2147483647, - "email": "string", - "tg_acc": "string", - "merch": [merch_example], + **order_two_request_example +} +orders_response_list_example = { + "id": 0, + "ambassador": { + "id": 0, + "image": "string", + "first_name": "string", + "last_name": "string", + "middle_name": "string", + "status": "string", + "tg_acc": "string", + "ya_programm": "string" + }, + "track_number": 2147483647, + "created_date": "2024-03-01", + "status": "string" } -order_response_example = {"id": 0, "ambassador_id": 0, **order_request_example} all_merch_to_ambassador_example = { "id": 0, "first_name": "string", @@ -46,7 +70,7 @@ summary="Создание новой заявки", description="Создает новый заказ в базе", examples=[ - OpenApiExample("post", order_request_example, request_only=True), + OpenApiExample("post", order_one_request_example, request_only=True), OpenApiExample("201", order_response_example, response_only=True), ], responses={ @@ -88,14 +112,19 @@ ), "list": extend_schema( summary="Получение всех существующих заявок", - description="Возращает список всех существующих заявок", + description="Возращает список всех существующих заявок,\ + доступна фильтрации по status и ambassador__id (2 нижних)", examples=[ - OpenApiExample("200", order_response_example, response_only=True), + OpenApiExample( + "200", + orders_response_list_example, + response_only=True + ), ], responses={ 200: OpenApiResponse( description="Список всех существующих заявок", - response=OrderSerializer, + response=AllOrdersListSerialiazer, ) }, tags=["Заявки"], @@ -106,7 +135,7 @@ examples=[ OpenApiExample( "patch", - order_request_example, + order_two_request_example, request_only=True, description="Можно изменить одно или несколько полей из списка", ), From 1ce793397deb1ead0562885f7823cb0fa52ea232 Mon Sep 17 00:00:00 2001 From: Pavel Drovnin Date: Tue, 5 Mar 2024 03:25:56 +0300 Subject: [PATCH 5/9] isort --- backend/orders/models.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/backend/orders/models.py b/backend/orders/models.py index 99d4888..53f9fc3 100644 --- a/backend/orders/models.py +++ b/backend/orders/models.py @@ -2,10 +2,7 @@ from django.db import models from ambassadors.choices import AmbassadorsClothesSizes, AmbassadorsFootsSizes -from ambassadors.models import ( - AbstractAmbassadorAddress, - Ambassador, -) +from ambassadors.models import AbstractAmbassadorAddress, Ambassador from users.models import AbstractUser From 240e889085d656060c7db89cef4e1139a0c45b97 Mon Sep 17 00:00:00 2001 From: Pavel Drovnin Date: Tue, 5 Mar 2024 03:53:03 +0300 Subject: [PATCH 6/9] transfer shortAmbassador serializer to ambassador app --- backend/ambassadors/serializers.py | 22 ++++++++++++++++++++++ backend/content/serializers.py | 17 +---------------- backend/orders/serializers.py | 25 ++----------------------- 3 files changed, 25 insertions(+), 39 deletions(-) diff --git a/backend/ambassadors/serializers.py b/backend/ambassadors/serializers.py index 340fa5a..a99357c 100644 --- a/backend/ambassadors/serializers.py +++ b/backend/ambassadors/serializers.py @@ -178,6 +178,28 @@ def update(self, instance, validated_data): return instance +class ShortAmbassadorSerializer(serializers.ModelSerializer): + """Сериалайзер для отображения короткого списка полей амбассадора + Поля: id, image, first_name, last_name, status, tg_acc, ya_programm""" + + ya_programm = serializers.SerializerMethodField() + + class Meta: + model = Ambassador + fields = ( + "id", + "image", + "first_name", + "last_name", + "status", + "tg_acc", + "ya_programm" + ) + + def get_ya_programm(self, obj): + return obj.ya_programm.title + + class AmbassadorContentPromoSerializer(serializers.ModelSerializer): """Родительский сериализатор для контента промокодов.""" diff --git a/backend/content/serializers.py b/backend/content/serializers.py index 616cba8..191da47 100644 --- a/backend/content/serializers.py +++ b/backend/content/serializers.py @@ -6,6 +6,7 @@ from rest_framework.exceptions import ValidationError from ambassadors.models import Ambassador, AmbassadorAddress +from ambassadors.serializers import ShortAmbassadorSerializer from ambassadors.validators import tg_acc_validator from ambassadors_project.constants import ( ERROR_MESSAGE_PROMOCODE, @@ -14,22 +15,6 @@ from content.models import Content, Documents, Promocode -class ShortAmbassadorSerializer(serializers.ModelSerializer): - """Сериализатор для амбассадора в новой заявке на контент.""" - - class Meta: - model = Ambassador - fields = ( - "id", - "image", - "last_name", - "first_name", - "ya_programm", - "tg_acc", - "status", - ) - - class NewContentSerializer(serializers.ModelSerializer): """Сериализатор для отображения заявок на контент.""" diff --git a/backend/orders/serializers.py b/backend/orders/serializers.py index a4454e3..87dec10 100644 --- a/backend/orders/serializers.py +++ b/backend/orders/serializers.py @@ -1,6 +1,7 @@ from rest_framework import serializers from ambassadors.models import Ambassador +from ambassadors.serializers import ShortAmbassadorSerializer from orders.models import Merch, Order, OrderStatus from orders.utils import get_filtered_merch_objects from orders.validators import validate_editing_order, validate_merch_num @@ -81,32 +82,10 @@ def to_representation(self, instance: Order): return instance -class AmbassadorShortSerializer(serializers.ModelSerializer): - """Сериалайзер для отображения короткого списка полей амбассадора""" - - ya_programm = serializers.SerializerMethodField() - - class Meta: - model = Ambassador - fields = ( - "id", - "image", - "first_name", - "last_name", - "middle_name", - "status", - "tg_acc", - "ya_programm" - ) - - def get_ya_programm(self, obj): - return obj.ya_programm.title - - class AllOrdersListSerialiazer(serializers.ModelSerializer): """Сериалайзер для отображения всех существующих заявок""" - ambassador = AmbassadorShortSerializer() + ambassador = ShortAmbassadorSerializer() class Meta: model = Order From c6b017f9e0a2a721c80429a6a253b10e9513b4bf Mon Sep 17 00:00:00 2001 From: Pavel Drovnin Date: Tue, 5 Mar 2024 03:53:10 +0300 Subject: [PATCH 7/9] fixes --- backend/orders/admin.py | 10 ++++++---- backend/orders/models.py | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/backend/orders/admin.py b/backend/orders/admin.py index a9f91c6..7e6c683 100644 --- a/backend/orders/admin.py +++ b/backend/orders/admin.py @@ -29,16 +29,18 @@ class OrderAdmin(admin.ModelAdmin): "track_number", "comment", "total_cost", + "ambassador", + "get_merch" ) - search_fields = ("ambassador_id", "merch", "status", "city") - list_filter = ("ambassador_id", "merch", "status", "city") + search_fields = ("ambassador", "merch", "status", "city") + list_filter = ("ambassador", "merch", "status", "city") empty_value_display = "-пусто-" def get_merch(self, obj: Order) -> str: return ", ".join([merch.name for merch in obj.merch.all()]) - def get_ambassador_id(self, obj: Order) -> str: - return Ambassador.objects.get(pk=obj.ambassador_id) + def get_ambassador(self, obj: Order) -> str: + return Ambassador.objects.get(pk=obj.ambassador) admin.site.register(Merch, MerchAdmin) diff --git a/backend/orders/models.py b/backend/orders/models.py index 53f9fc3..c62a23e 100644 --- a/backend/orders/models.py +++ b/backend/orders/models.py @@ -51,7 +51,7 @@ class Order(AbstractUser, AbstractAmbassadorAddress): ambassador = models.ForeignKey( Ambassador, related_name="orders", - verbose_name="ID амбассадора", + verbose_name="Амбассадор в заказе", on_delete=models.CASCADE, ) merch = models.ManyToManyField( From d62df5f4ac9b8a72351ef350eb428b5db1419d5b Mon Sep 17 00:00:00 2001 From: Pavel Drovnin Date: Tue, 5 Mar 2024 03:53:10 +0300 Subject: [PATCH 8/9] fixes --- backend/orders/serializers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/orders/serializers.py b/backend/orders/serializers.py index 87dec10..e53ac68 100644 --- a/backend/orders/serializers.py +++ b/backend/orders/serializers.py @@ -136,7 +136,7 @@ class Meta: "total_orders_cost", ) - def get_ya_programm(self, obj): + def get_ya_programm(self, obj: Ambassador): return obj.ya_programm.title def get_city(self, obj: Ambassador) -> str: From fea2b1cb909b0433e65ff27005987d49ef1da995 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 5 Mar 2024 01:00:13 +0000 Subject: [PATCH 9/9] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- backend/ambassadors/models.py | 1 + backend/ambassadors/serializers.py | 2 +- backend/openapi/orders_schema.py | 16 ++++++++-------- backend/orders/admin.py | 2 +- backend/orders/models.py | 2 +- 5 files changed, 12 insertions(+), 11 deletions(-) diff --git a/backend/ambassadors/models.py b/backend/ambassadors/models.py index 253e200..23fd33a 100644 --- a/backend/ambassadors/models.py +++ b/backend/ambassadors/models.py @@ -51,6 +51,7 @@ class Ambassador(AbstractUser): Модель амбассадора. Поля абстракта: first_name, last_name, middle_name, phone """ + email = models.CharField( verbose_name="Электронная почта", max_length=200, diff --git a/backend/ambassadors/serializers.py b/backend/ambassadors/serializers.py index a99357c..66fb8ef 100644 --- a/backend/ambassadors/serializers.py +++ b/backend/ambassadors/serializers.py @@ -193,7 +193,7 @@ class Meta: "last_name", "status", "tg_acc", - "ya_programm" + "ya_programm", ) def get_ya_programm(self, obj): diff --git a/backend/openapi/orders_schema.py b/backend/openapi/orders_schema.py index cb5d4ff..84a299f 100644 --- a/backend/openapi/orders_schema.py +++ b/backend/openapi/orders_schema.py @@ -6,10 +6,10 @@ from orders.serializers import ( AllMerchToAmbassadorSerializer, + AllOrdersListSerialiazer, AmbassadorOrderListSerializer, MerchSerializer, OrderSerializer, - AllOrdersListSerialiazer ) merch_example = {"name": "string", "size": "XS"} @@ -36,7 +36,7 @@ "created_date": "2024-02-29", "status": "string", "total_cost": 2147483647, - **order_two_request_example + **order_two_request_example, } orders_response_list_example = { "id": 0, @@ -48,11 +48,11 @@ "middle_name": "string", "status": "string", "tg_acc": "string", - "ya_programm": "string" + "ya_programm": "string", }, "track_number": 2147483647, "created_date": "2024-03-01", - "status": "string" + "status": "string", } all_merch_to_ambassador_example = { "id": 0, @@ -70,7 +70,9 @@ summary="Создание новой заявки", description="Создает новый заказ в базе", examples=[ - OpenApiExample("post", order_one_request_example, request_only=True), + OpenApiExample( + "post", order_one_request_example, request_only=True + ), OpenApiExample("201", order_response_example, response_only=True), ], responses={ @@ -116,9 +118,7 @@ доступна фильтрации по status и ambassador__id (2 нижних)", examples=[ OpenApiExample( - "200", - orders_response_list_example, - response_only=True + "200", orders_response_list_example, response_only=True ), ], responses={ diff --git a/backend/orders/admin.py b/backend/orders/admin.py index 7e6c683..d9f679a 100644 --- a/backend/orders/admin.py +++ b/backend/orders/admin.py @@ -30,7 +30,7 @@ class OrderAdmin(admin.ModelAdmin): "comment", "total_cost", "ambassador", - "get_merch" + "get_merch", ) search_fields = ("ambassador", "merch", "status", "city") list_filter = ("ambassador", "merch", "status", "city") diff --git a/backend/orders/models.py b/backend/orders/models.py index c62a23e..50eef59 100644 --- a/backend/orders/models.py +++ b/backend/orders/models.py @@ -89,7 +89,7 @@ class Order(AbstractUser, AbstractAmbassadorAddress): MinValueValidator(0, "Стоимость не может быть отрицательной") ], null=True, - default=0 + default=0, ) class Meta: