feat / AEB-60 create get route for sensors list

This commit is contained in:
Timofey
2025-10-06 15:56:44 +03:00
parent 0aa1c79690
commit f45c4ee14d
9 changed files with 212 additions and 25 deletions

View File

@@ -83,9 +83,10 @@ class ObjectAdmin(admin.ModelAdmin):
@admin.register(Zone)
class ZoneAdmin(admin.ModelAdmin):
list_display = ('object', 'name')
list_filter = ('object', 'name')
search_fields = ('object', 'name')
list_display = ('object', 'floor', 'name')
list_filter = ('object', 'floor')
search_fields = ('object__title', 'name')
list_per_page = 10
list_max_show_all = 100
list_editable = ('floor', 'name')
list_display_links = ('object',)

View File

@@ -0,0 +1,23 @@
# Generated by Django 5.2.7 on 2025-10-06 12:47
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sitemanagement', '0006_object_zone'),
]
operations = [
migrations.AlterModelOptions(
name='zone',
options={'ordering': ['object', 'floor', 'name'], 'verbose_name': 'Зона', 'verbose_name_plural': 'Зоны'},
),
migrations.AddField(
model_name='zone',
name='floor',
field=models.PositiveSmallIntegerField(default=1, verbose_name='Этаж'),
preserve_default=False,
),
]

View File

@@ -174,6 +174,7 @@ class Zone(models.Model):
"""Зона"""
object = models.ForeignKey(Object, on_delete=models.CASCADE, related_name="zones", verbose_name="Объект")
name = models.CharField(max_length=255, verbose_name="Название")
floor = models.PositiveSmallIntegerField(verbose_name="Этаж")
sensors = models.ManyToManyField(Sensor, related_name="zones", verbose_name="Датчики")
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
@@ -181,8 +182,16 @@ class Zone(models.Model):
class Meta:
verbose_name = "Зона"
verbose_name_plural = "Зоны"
ordering = ["object", "name"]
ordering = ["object", "floor", "name"] # сортировка сначала по объекту, потом по этажу
def clean(self):
from django.core.exceptions import ValidationError
# проверяем что номер этажа не превышает количество этажей в здании
if self.floor > self.object.floors:
raise ValidationError({
'floor': f'Номер этажа не может быть больше количества этажей в здании ({self.object.floors})'
})
def __str__(self):
return f"{self.object.title} - {self.name}"
return f"{self.object.title} - Этаж {self.floor} - {self.name}"