Django: Как добавить внешний ключ, который ссылается сам на себя, а также устанавливает поле для ссылающегося объекта

Простите за ужасное название. Я даже не уверен, что именно я ищу. В основном, я хотел бы создать следующее:

  • Модель, состоящая из интерфейсов коммутатора Ethernet (например, ge-0/0/1, po4096 и т.д.)
  • Возможность соединять интерфейсы Ethernet-коммутаторов ВМЕСТЕ (таким образом, внешний ключ к собственной модели)

Вот что я имею в настоящее время:

class EthernetSwitchInterfaces(models.Model):
    """
    Represents interfaces on switches
    (ex. ge-0/0/1, ae1001, po1001, xe-1/1/1, eth1/101, etc.)
    """
    interface = models.CharField(max_length=32, blank=False, null=False, help_text='Interface name (ex. xe-1/1/1, eth1/101, po1001, etc.)')
    switch = models.ForeignKey(EthernetSwitches, to_field='id', on_delete=models.CASCADE, help_text='Switch')

    # Note the speed of that interface
    link_bandwidth_in_gbps = models.IntegerField(blank=False, null=False, help_text='Total interface bandwidth in Gbps')

    # Account for port channel interfaces
    is_port_channel = models.BooleanField(default=False, blank=False, null=False, help_text='Is this a port channel interface?')
    number_of_links = models.IntegerField(blank=False, null=False, default=1, help_text='Number of links (if port channel)')

    switch_to_switch = models.ForeignKey('self', blank=True, null=True, help_text='Switch-to-switch connection', on_delete=models.SET_NULL)

    def __str__(self):
        return "{} - {}".format(self.switch, self.interface)

    class Meta(object):
        unique_together = ('interface', 'switch',)

Это почти работает. Я создаю интерфейс, создаю второй интерфейс и устанавливаю поле switch_to_switch второго интерфейса на исходный интерфейс. Все работает отлично, за исключением того, что исходный интерфейс имеет пустое значение switch_to_switch.

Любая помощь будет очень признательна! Я застрял на этом уже неделю и это сводит меня с ума. Спасибо!

Вернуться на верх