Django - Модель - создать x новых полей на основе значения интергера в другом поле - PullRequest
0 голосов
/ 06 февраля 2020

Я новичок в 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)

Спасибо за любые указатели в правильном направлении. Если в то же время мы найдем решение, я опубликую его здесь для дальнейшего использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...