Update driver frequency_response_chart

This commit is contained in:
apheyhys 2025-05-09 22:47:01 +03:00
parent 967da2ba42
commit bb9d63b448
2 changed files with 31 additions and 5 deletions

View file

@ -209,7 +209,7 @@ class HeadphonesAdmin(admin.ModelAdmin):
'fields': [
('impedance', 'sensitivity'),
'frequency_range',
'frequency_response_chart',
('frequency_response_chart', 'frequency_response_chart_author', 'frequency_response_chart_link'),
('microphone', 'noise_cancellation'),
'ip_rating',
]
@ -378,8 +378,8 @@ class TagsAdmin(admin.ModelAdmin):
@admin.register(DriverType)
class DriverTypeAdmin(admin.ModelAdmin):
list_display = ('name', 'slug')
search_fields = ('name',)
list_display = ('name', 'slug', 'encoding')
search_fields = ('name', 'encoding')
prepopulated_fields = {'slug': ('name',)}

View file

@ -23,6 +23,9 @@ def upload_to_case_image(instance, filename):
ext = filename.split('.')[-1]
return f"headphones/{instance.headphones.id}/case_images/{instance.slug}.{ext}"
def upload_to_frequency_response(instance, filename):
return f"headphones/{instance.headphones.id}/frequency_response/{filename}"
# ======================
# Базовые справочники
# ======================
@ -203,6 +206,7 @@ class DriverModel(models.Model):
class DriverType(models.Model):
name = models.CharField(max_length=50, verbose_name="Тип драйвера")
encoding = models.CharField(blank=True, max_length=10, verbose_name="Буквенное обозначение>")
slug = models.SlugField(unique=True, verbose_name="URL-идентификатор")
class Meta:
@ -612,6 +616,14 @@ def delete_image_file(sender, instance, **kwargs):
except Exception as e:
print(f"Ошибка при удалении файла (сигнал): {e}")
class HeadphonesMicrophoneType(models.Model):
type = models.CharField(max_length=50, verbose_name="Тип микрофона")
description = models.CharField(blank=True, verbose_name="Описание")
class Meta:
verbose_name = "Тип микрофона"
# ======================
# Основная модель наушников
# ======================
@ -684,12 +696,26 @@ class Headphones(models.Model):
)
# Технические характеристики
frequency_response_chart = models.JSONField(
verbose_name="АЧХ (JSON)",
frequency_response_chart = models.FileField(
verbose_name="АЧХ (CSV)",
upload_to = upload_to_frequency_response,
null=True,
blank=True,
help_text="Данные в формате [{'frequency': 20, 'amplitude': -2.5}, ...]"
)
frequency_response_chart_author = models.CharField(
verbose_name="Автор АЧХ",
null=True,
blank=True,
)
frequency_response_chart_link = models.CharField(
verbose_name="Ссылка на АЧХ",
null=True,
blank=True,
)
impedance = models.DecimalField(
verbose_name="Импеданс (Ом)",
max_digits=5,