Size: a a a

Django [ru] #STAY HOME

2018 November 25

ДШ

Дмитрий Шепелев in Django [ru] #STAY HOME
допустим, есть две модели:
class A(models.Model):
   pass

class B(models.Model):
   a = fk(A)


Я хочу выбрать все А, на которые нет ссылок из модели B. Думал сделать это через LEFT JOIN с проверкой WHERE на null
источник

ID

Ihor Dreyev in Django [ru] #STAY HOME
Есть релейтед нейм
источник

ДШ

Дмитрий Шепелев in Django [ru] #STAY HOME
и?
источник

ID

Ihor Dreyev in Django [ru] #STAY HOME
И можно из А обратиться к Б
источник

ДШ

Дмитрий Шепелев in Django [ru] #STAY HOME
Ihor Dreyev
На Хабре есть целая статья
если вы про ту статью, про которую я говорю, то да, я читал её
источник

ДШ

Дмитрий Шепелев in Django [ru] #STAY HOME
Ihor Dreyev
И можно из А обратиться к Б
а дальше?
источник

ID

Ihor Dreyev in Django [ru] #STAY HOME
Фильтруешь на нулл?
источник

ДШ

Дмитрий Шепелев in Django [ru] #STAY HOME
A.objects.filter(b_set=None) ?
источник

ДШ

Дмитрий Шепелев in Django [ru] #STAY HOME
типо такого?
источник

ID

Ihor Dreyev in Django [ru] #STAY HOME
Ну да
источник

MS

Maxim Stikharev in Django [ru] #STAY HOME
```
class A(models.Model):
   pass

class B(models.Model):
   a = fk(A, related_name='b_objects')

```
a.b_objects.all()
источник

ДШ

Дмитрий Шепелев in Django [ru] #STAY HOME
ок, щас попробую. Интересно, во что это разложится в sql
источник

ДШ

Дмитрий Шепелев in Django [ru] #STAY HOME
Maxim Stikharev
```
class A(models.Model):
   pass

class B(models.Model):
   a = fk(A, related_name='b_objects')

```
a.b_objects.all()
не, это вы иннер сделали
источник

MS

Maxim Stikharev in Django [ru] #STAY HOME
my_orm_query.query()
источник

ДШ

Дмитрий Шепелев in Django [ru] #STAY HOME
Maxim Stikharev
my_orm_query.query()
это понятно)
источник

ДШ

Дмитрий Шепелев in Django [ru] #STAY HOME
в общем, спасибо за советы
источник

ID

Ihor Dreyev in Django [ru] #STAY HOME
Так ты покажи запрос который оно сгенерило, пожл)
источник

ДШ

Дмитрий Шепелев in Django [ru] #STAY HOME
ок, чуть позже скину)
источник

ДШ

Дмитрий Шепелев in Django [ru] #STAY HOME
Ihor Dreyev
Так ты покажи запрос который оно сгенерило, пожл)
При запросе
A.objects.filter(b_isnull=True)

получилось something like this
SELECT "app_a"."name",  FROM "app_a" LEFT OUTER JOIN "app_b" ON ("app_a"."id" = "app_b"."a_id") WHERE "app_b"."id" IS NULL
источник

ID

Ihor Dreyev in Django [ru] #STAY HOME
То что надо)
источник