Как получить данные из двух таблиц с DjangoORM? - PullRequest
0 голосов
/ 02 марта 2020

У меня есть две таблицы в базе данных:

class CustomerEquipment(models.Model):
serial_number = models.CharField(max_length=255)
state_timestamp = models.DateTimeField()
state_type = models.IntegerField()

class Meta:
    managed = False
    db_table = 'customer_equipment'


class LogCustomerEquipment(models.Model):
    state = models.IntegerField()
    state_timestamp = models.DateTimeField()
    serial_number = models.CharField(max_length=255)

class Meta:
    managed = False
    db_table = 'log_customer_equipment'

Я выполняю два запроса к базе данных:

    customer_equipment_list = CustomerEquipment.objects.using('portal').filter(
        Q(state_type=10) & Q(state_timestamp__icontains='2020-02-27')
    )
    log_customer_equipment_list = LogCustomerEquipment.objects.using('portal').filter(
        Q(state=2) & Q(state_timestamp__icontains='2020-02-27')
    )

Мне нужно получить serial_number , которые находятся в обоих столы. Как это сделать? Как я могу оптимизировать запросы? Один и тот же serial_number может быть в обеих таблицах. Нужно выбрать те, которые пересекаются.

1 Ответ

0 голосов
/ 02 марта 2020

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

set(CustomerEquipment.objects.values_list('serial_number ', flat=True)) & set(LogCustomerEquipment.objects.values_list('serial_number ', flat=True))

или, может быть, вы должны рефакторинг моделей из отношения. Например, используя ForeignKey или ManyToManyField.

...