Как получить список запросов, не существующий в другой модели в 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)
Вернуться на верх