From 967da2ba421928d89110d4483df24a2f378e1050 Mon Sep 17 00:00:00 2001 From: apheyhys Date: Tue, 6 May 2025 21:59:20 +0300 Subject: [PATCH] Added new fields for wireless headphones --- headphones/admin.py | 14 +++++++++++--- headphones/models.py | 36 +++++++++++++++++++++++++++++++++--- 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/headphones/admin.py b/headphones/admin.py index 4e8a8dd..e892bd0 100644 --- a/headphones/admin.py +++ b/headphones/admin.py @@ -59,16 +59,18 @@ class WiredHeadphonesInline(admin.StackedInline): ] + + class WirelessHeadphonesInline(admin.StackedInline): model = WirelessHeadphones extra = 0 fieldsets = [ (None, { 'fields': [ - ('wireless_technology', 'bluetooth_version'), + ('wireless_technology', 'bluetooth_version', 'chip'), ('battery_life', 'charging_time'), + ('has_charging_case', 'charging_case_battery_life', 'charging_case_time'), 'charging_interface', - ('has_charging_case', 'charging_case_battery_life'), 'supported_codecs' ] }) @@ -222,7 +224,7 @@ class HeadphonesAdmin(admin.ModelAdmin): 'fields': [ ('date_added', 'published') ], - 'classes': ('collapse',) + # 'classes': ('collapse',) }), ] @@ -432,6 +434,12 @@ class WirelessTechnologyAdmin(admin.ModelAdmin): search_fields = ('name', 'description') +@admin.register(WirelessHeadphonesChip) +class WWirelessHeadphonesChipAdmin(admin.ModelAdmin): + list_display = ('name',) + search_fields = ('name', 'description') + + @admin.register(ChargingInterface) class ChargingInterfaceAdmin(admin.ModelAdmin): list_display = ('name',) diff --git a/headphones/models.py b/headphones/models.py index 719fb58..d567eca 100644 --- a/headphones/models.py +++ b/headphones/models.py @@ -750,7 +750,7 @@ class Headphones(models.Model): # blank=True, # verbose_name="Доступные цвета" # ) - weight = models.PositiveSmallIntegerField( + weight = models.FloatField( verbose_name="Вес (г)", null=True, blank=True @@ -877,6 +877,18 @@ class WiredHeadphones(models.Model): return f"Проводные характеристики для {self.headphones.model}" +class WirelessHeadphonesChip(models.Model): + name = models.CharField(max_length=50, verbose_name="Название") + description = models.TextField(blank=True, verbose_name="Описание") + + class Meta: + verbose_name = "Используемый чип" + + def __str__(self): + return self.name + + + class WirelessHeadphones(models.Model): headphones = models.OneToOneField( Headphones, @@ -896,12 +908,16 @@ class WirelessHeadphones(models.Model): verbose_name="Версия Bluetooth" ) battery_life = models.IntegerField( + blank=True, + null=True, verbose_name="Время работы (ч)", help_text="Время работы от батареи в часах" ) charging_time = models.IntegerField( - verbose_name="Время зарядки (мин)", - help_text="Время зарядки в минутах" + blank=True, + null=True, + verbose_name="Время зарядки наушников (мин)", + help_text="Время зарядки наушников в минутах" ) has_charging_case = models.BooleanField( default=False, @@ -913,11 +929,25 @@ class WirelessHeadphones(models.Model): verbose_name="Время работы с кейсом (ч)", help_text="Общее время работы с кейсом в часах" ) + charging_case_time = models.IntegerField( + blank=True, + null=True, + verbose_name="Время зарядки кейса (мин)", + help_text="Время зарядки кейса в минутах" + ) + charging_interface = models.ForeignKey( ChargingInterface, on_delete=models.PROTECT, verbose_name="Интерфейс зарядки" ) + chip = models.ForeignKey( + WirelessHeadphonesChip, + blank=True, + null=True, + on_delete=models.PROTECT, + verbose_name="Чип, используемый в наушниках" + ) supported_codecs = models.ManyToManyField( AudioCodec, blank=True,