From 844589ba99a7aca625c3d89746e105796314e57c Mon Sep 17 00:00:00 2001 From: Lymar Volodymyr Date: Sat, 29 Jun 2024 14:12:15 +0200 Subject: [PATCH] docs: updated docstrings in goods app --- clients/models.py | 2 ++ clients/serializers.py | 4 +++- clients/views.py | 4 ++++ goods/models.py | 17 +++++++++++++++++ goods/serializers.py | 4 ++++ goods/views.py | 8 ++++++++ 6 files changed, 38 insertions(+), 1 deletion(-) diff --git a/clients/models.py b/clients/models.py index 2296809..4f61b8b 100644 --- a/clients/models.py +++ b/clients/models.py @@ -8,6 +8,7 @@ class DirectorPosition(models.Model): """ Model representing a director's position. """ + director_position = models.CharField(max_length=40, verbose_name="Должность директора") class Meta: @@ -22,6 +23,7 @@ class Client(models.Model): """ Model representing a client organization. """ + # Main Information client_name = models.CharField( max_length=100, verbose_name="Наименование организации", db_index=True diff --git a/clients/serializers.py b/clients/serializers.py index 62966ba..20653f2 100644 --- a/clients/serializers.py +++ b/clients/serializers.py @@ -19,7 +19,8 @@ class ClientSerializer(serializers.ModelSerializer[Client]): """ Serializer for the Client model. - Serializes all fields of the Client model including nested serialization of 'director_position'. + Serializes all fields of the Client model + including nested serialization of 'director_position'. Adds 'destination_city' and 'railway_station' as CharField serializers. Sets the current authenticated user as the value for the 'user' field using HiddenField. @@ -32,6 +33,7 @@ class ClientSerializer(serializers.ModelSerializer[Client]): Note: 'user' field is automatically populated with the current user making the request. """ + director_position = DirectorPositionSerializer() destination_city: serializers.CharField = serializers.CharField() railway_station: serializers.CharField = serializers.CharField() diff --git a/clients/views.py b/clients/views.py index 50e0015..b9495de 100644 --- a/clients/views.py +++ b/clients/views.py @@ -14,6 +14,7 @@ class ClientAPIView(generics.ListCreateAPIView[Client]): Retrieves a list of clients with related director position, destination city, and railway station. Caches the client list for 15 minutes if not already cached. """ + queryset = Client.objects.select_related( "director_position", "destination_city", "railway_station" ).all() @@ -41,6 +42,7 @@ class ClientAPIUpdateView(generics.RetrieveUpdateAPIView[Client]): Retrieves and updates a specific client record based on its primary key. Requires ClientAccessPermission for authorization. """ + queryset = Client.objects.all() serializer_class = ClientSerializer permission_classes = (ClientAccessPermission,) @@ -53,6 +55,7 @@ class ClientAPIDeleteView(generics.DestroyAPIView[Client]): Deletes a specific client record based on its primary key. Requires ClientAccessPermission for authorization. """ + queryset = Client.objects.all() serializer_class = ClientSerializer permission_classes = (ClientAccessPermission,) @@ -65,6 +68,7 @@ class DirectorPositionListView(generics.ListAPIView[DirectorPosition]): Retrieves a list of all available director positions. Requires authentication (IsAuthenticated). """ + queryset = DirectorPosition.objects.all() serializer_class = DirectorPositionSerializer permission_classes = (IsAuthenticated,) diff --git a/goods/models.py b/goods/models.py index b3e1a58..20f85e0 100644 --- a/goods/models.py +++ b/goods/models.py @@ -4,6 +4,11 @@ class Product(models.Model): + """ + A model representing a product with specific + attributes like flour type, brand, package, and price. + """ + flour_name = models.ForeignKey( "Flour", on_delete=models.PROTECT, related_name="flour_goods", db_index=True ) @@ -28,6 +33,10 @@ def __str__(self) -> str: class Flour(models.Model): + """ + A model representing the type of flour used in products. + """ + flour_name = models.CharField(max_length=255, blank=False) class Meta: @@ -40,6 +49,10 @@ def __str__(self) -> str: class Brand(models.Model): + """ + A model representing a brand associated with products. + """ + brand = models.CharField(max_length=100, verbose_name="Брэнд", blank=True) class Meta: @@ -52,6 +65,10 @@ def __str__(self) -> str: class Package(models.Model): + """ + A model representing packaging details associated with products. + """ + package = models.IntegerField(verbose_name="Тара") factory = models.ForeignKey(Factory, on_delete=models.PROTECT) pallet_weight = models.PositiveIntegerField(verbose_name="Вес на паллете") diff --git a/goods/serializers.py b/goods/serializers.py index cecf80f..34686c8 100644 --- a/goods/serializers.py +++ b/goods/serializers.py @@ -4,6 +4,10 @@ class GoodsSerializer(serializers.ModelSerializer[Product]): + """ + Serializer for serializing/deserializing Product objects. + """ + flour_name: serializers.CharField = serializers.CharField() brand: serializers.CharField = serializers.CharField() package: serializers.CharField = serializers.CharField() diff --git a/goods/views.py b/goods/views.py index 5deec59..51dca05 100644 --- a/goods/views.py +++ b/goods/views.py @@ -7,11 +7,19 @@ class GoodsViewSet(viewsets.ModelViewSet[Product]): + """ + A viewset for managing CRUD operations for products. + Retrieves a list of products with caching enabled for 30 minutes. + """ + queryset = Product.objects.select_related("flour_name", "brand", "package").all() serializer_class = GoodsSerializer permission_classes = (IsAuthenticated,) def get_queryset(self): + """ + Override the default queryset to utilize caching for better performance. + """ cached_goods = cache.get("goods_list") if cached_goods: return cached_goods