настоящее время у меня Django модели, как этотДжанго внутреннее соединение по нулям
MyFirstObject(models.Model):
some_field = models.BooleanField(default=False)
MySecondObject(models.Model):
first_object = models.ForeignKey(MyFirstObject, db_column='firstObjectId')
Из-за различных проблем, наша целостность данных повреждена. Поэтому мне нужно найти экземпляры, в которых MyFirstObject был удален, но MySecondObject по-прежнему имеет строку w с внешним ключом.
база данных будет выглядеть примерно так:
TABLE my_first_object
id someField
1 a
2 a
3 b
TABLE my_second_object
id firstObjectId
1 1
2 3
3 4
Уведомление строке 3 таблицы my_second_object имеет firstObjectID, который не имеет соответствующую запись в таблице my_first_object. Я хочу найти все подобные экземпляры.
Если бы я делал необработанный SQL, я хотел бы сделать
SELECT my_second_object.id, my_second_object.firstObjectId
FROM my_second_object
LEFT JOIN ON (my_second_object.firstObjectId = my_first_object.id)
WHERE my_first_object.id IS NULL
В Djago, я пытаюсь
MySecondObject.objects.filter(my_first_object__id__isnull=true)
Но когда я смотрю на запрос, в результате, он делает внутреннее соединение вместо левого соединения. У кого-нибудь есть предложения? Благодаря!
Проверить http://stackoverflow.com/questions/21271835/left-join-django-orm –
@AhmedHosny, да, я действительно видел, что, когда я впервые попробовал Google ответ. Но я не вижу, как решение, предлагаемое в этом сообщении, отличается от фильтра, который я пытаюсь сделать? –
Он фильтрует первую модель, а не вторую. Ответ там, говорящий, что Left Join будет выполнен, когда вы выполните следующее: MyFirstObject.objects.filter (mysecondobject__isnull = True). –