Администрирование Django Фильтрация OneToOneField - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь создать приложение для управления имеющимся у нас сетевым оборудованием.Но мне нужна помощь, чтобы выяснить, как создавать свои модели для коммутаторов и сетевой карты.

Итак, я создал 3 модели:

  1. Сетевая карта, связанная с ForeignKey с оборудованием.Например, server-dc01 имеет одну сетевую карту.
  2. Переключатель, это для моих переключателей.
  3. SwitchPort, здесь я могу создать порты и связать их с коммутатором.Поэтому, если у коммутатора 24 порта, мне нужно создать 24 порта коммутатора и связать их все с моим коммутатором.Немного раздражает.Я не знаю, является ли это лучшим.

Вот модель, которая у меня есть на данный момент:

class NetworkCard(models.Model):
    equipment = models.ForeignKey('Equipment', on_delete=models.CASCADE)
    attached_to_port = models.OneToOneField('SwitchPorts', on_delete=models.CASCADE, blank=True, null=True)
    def __str__(self):
        return self.name

class Switch(Equipment):
    number_of_ports = models.PositiveSmallIntegerField()

class SwitchPorts(models.Model):
    number = models.PositiveSmallIntegerField()
    switch = models.ForeignKey('Switch', on_delete=models.CASCADE)

Итак, в admin я могу добавить сетевую карту к оборудованию и «подключить» эту сетевую карту кпорт коммутатора.Но, конечно, когда у меня есть 10 коммутаторов с 48 портами, выпадающий список слишком длинный.Я попробовал raw_id_field, но он не очень удобен для пользователя.

Что мне нужно, так это в админке: - выпадающий список, где я могу выбрать коммутатор - второй выпадающий список, где я могу выбрать порт на выбранном ранее коммутаторе, показывая только свободные порты на этом коммутаторе,

Поэтому у меня следующие вопросы:

  • мой путь с моделью порта коммутатора хорош?
  • если да, как заставить двух выбранных работать так, как я хочу?
  • если нет, что мне делать?

Я также пытался не иметьмодель порта коммутатора.Таким образом, карта связана только с коммутатором.В этом сценарии я могу добавить число (в PositiveSmallIntegerField), чтобы определить, к какому порту коммутатора подключена карта.Очень удобный для пользователя ... НО мне нужно добавить информацию о VLAN на моем порту на стороне коммутатора.

Есть идеи, ребята?

Спасибо!

1 Ответ

0 голосов
/ 26 марта 2019

Я думаю, что вы ищете django-smart-selects .Этот пакет позволяет объединять модели в цепочку, чтобы при выборе одной из них AJAX загружал следующую выбираемую опцию.

Что касается ваших моделей - я бы не использовал строковые представления.Вместо этого вы можете просто использовать модели (то есть switch = models.ForeignKey(Switch, ...). Наконец, я не уверен в наследовании Equipment, если вы не уверены, что это абстрактный класс (который я не вижу).

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