Я новичок в Django и узнал, как настроить мою модель данных (и, возможно, из logi c)
У меня есть оборудование, которое управляется силовыми линиями на основе IP - эти силовые панели может иметь 2, 4, 8 или 16 розеток. «Оборудование», которое может состоять из нескольких физических элементов (например, сервер, монитор, вентилятор и т. Д. c ...), может использовать один или несколько выходов. Мы хотели бы игнорировать идею силовых панелей и основывать систему на розетках - поэтому, если у меня есть две 8 силовых розетки, будет 16 розеток (с номерами 1-16) и т. Д. ...
Каждому элементу оборудования будет назначено от 1 до x розеток, независимо от того, в какой силовой панели физически установлена розетка.
Зная все это, у меня есть несколько проблем.
1) Как добавить панель питания в интерфейсе модель / администратор, выбрать из выпадающего списка количество розеток (2, 4, 8 или 16), а затем в форме отобразить правильное количество из целочисленных полей, чтобы мы могли ввести назначенный номер розетки. Т.е. если бы я создавал две панели питания
Powerbar 1 имеет 8 розеток, Powerbar 2 имеет 16 - поэтому я бы назвал их так:
Powerbar One
Физическая розетка 1 = Виртуальная розетка 1
...
Физический выход 8 = Виртуальный выход 8
Powerbar Two
Физический выход 1 = Виртуальный выход 9
...
Физический выход 16 = Виртуальный выход 24
Итак, чтобы создать powerbar one - я вижу, что я набрал бы в поле «Производитель», «Модель» и «Количество розеток», затем было бы создано, скажем, еще 8 целочисленных полей формы (и записей), которым я теперь могу назначить номер розетки. .
Я предполагаю, что мне нужно будет использовать форму logi c, но я еще не дошел до этой части без правильной модели данных.
2) Как мне назначить эти розетки к оборудованию и дают розетку название, например, «Брандмауэр А». Я знаю, что это проблема «один ко многим», но не знаю, как добавить более одной розетки к каждому элементу «оборудования»
Пока это моя модель ...
from django.db import models
from django.core.validators import MinValueValidator, MaxValueValidator
class ITRoom(models.Model):
id = models.AutoField(primary_key=True)
name = models.TextField()
def __str__(self):
return self.name
class powerbar(models.Model):
id = models.AutoField(primary_key=True)
manufacturer = models.CharField(max_length=50)
model = models.CharField(max_length=50)
controllable_outlets = models.IntegerField(
default=2,
validators=[
MaxValueValidator(16),
MinValueValidator(2)
]
)
mac_address = models.CharField(max_length=16)
ip_address = models.GenericIPAddressField()
def __str__(self):
return "%s %s %s" % (self.manufacturer, self.model, self.ip_address)
class outlet(models.Model):
outlet_id = models.AutoField(primary_key=True)
powerbar = models.ForeignKey(powerbar, on_delete=models.PROTECT)
outlet_assignment = models.CharField(max_length=50, unique=True)
outlet_number = models.IntegerField(unique=True)
def __str__(self):
return self.outlet_assignment
class Equipment(models.Model):
id = models.AutoField(primary_key=True)
name = models.TextField()
ITRoom = models.ForeignKey(ITRoom, on_delete=models.PROTECT)
outlet = models.ForeignKey(outlet, on_delete=models.PROTECT)
Спасибо за любые указатели в правильном направлении. Если в то же время мы найдем решение, я опубликую его здесь для дальнейшего использования.