Несколько внешних ключей для одного поля - PullRequest
1 голос
/ 26 февраля 2020

У меня есть два класса; Устройства и соединения. Я пытаюсь создать связь между ними.

Класс устройства;

class Devices(models.Model):
    device_no = models.IntegerField(primary_key=True)
    device_name= models.CharField(max_length=512)

Класс подключений;

class Connections(models.Model):
    connection_id = models.IntegerField(primary_key=True)
    device_name1 = models.CharField(max_length=512)  
    device_name2 = models.CharField(max_length=512) 
    device_no1= models.ForeignKey(Devices, on_delete=models.CASCADE, db_column="device_no1", related_name="dev1_no")
    device_no2= models.ForeignKey(Devices, on_delete=models.CASCADE, db_column="device_no2", related_name="dev2_no") 

Я изменил имена переменных из-за проблем безопасности

То, к чему я стремлюсь, это построить соединение между устройством одно и другим. Оба имеют одинаковые характеристики. Когда я использую его таким образом, он не возвращает никаких ошибок. Но когда я пытаюсь сделать запрос, например:

Connections.objects.filter(device1_no=dev_no)

, он не возвращает ни одного члена класса Device. Он возвращает только члены класса Connections. Я также пытался;

Connections.objects.filter(device_no1__device_no=12)

Любой совет?

1 Ответ

1 голос
/ 26 февраля 2020

Вы можете попробовать вот так:

for conn in Connections.objects.filter(device_no1=dev_no):
    print(conn.device_no2)

Или используя обратное соотношение (documentation):

for conn in dev_no.dev1_no.all():  # assuming dev_no is a Device instance
    print(conn.device_no2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...