Как получить список запросов, не существующий в другой модели в Django ORM?
У меня есть три стола:
Таблица1
class Table1(models.Model):
field1 = model.CharField(...)
field2 = model.CharField(...)
Таблица2
class Table2(models.Model):
field1 = model.CharField(...)
field2 = model.CharField(...)
Таблица3
class Table3(models.Model):
table1 = model.ForeignKey(Table1)
table2 = model.ForeignKey(Table2)
Я хочу получить все данные Table1, которых нет в Table3 с a, которая также включает Table2.
Например: В Table1 у меня есть три строки: rows1, rows2, rows3
В Таблице2 у меня есть одна строка: r1
В Table3 у меня есть одна строка: table1 = rows1 таблица2 = r1
Я хочу получить строки 2 и 3 из Table1 при поиске по Table2s r1 в Table3
Я могу получить ожидаемый результат, используя этот код:
table3 = Table3.objects.filter(table2=Table2.objects.get(id=1)).values_list('table1')
queryset = Table1.objects.filter(~Q(id__in=table3 ))
Мой вопрос: есть ли лучший способ сделать это?
Спасибо
Вы можете работать с .exclude(…) [Django-doc]:
Table1.objects.exclude(table3__table2_id=1)