Недавно я сделал опечатку в своем коде и заметил, что у меня такое же поведение, поэтому мне было интересно, какая разница между одиночными и двойными подчеркиваниями в запросах django.Django query single underscore ведет себя как двойной знак подчеркивания?
>>> underscore = MyModel.objects.filter(foreign_key_id=var)
>>> double_underscore = MyModel.objects.filter(foreign_key__id=var)
>>> underscore == double_underscore
False
>>> list(underscore) == list(double_underscore)
True
Я не уверен, что метод равенства используется для сравнения querysets, но когда я конвертировать в списки питона я найти точно те же элементы, содержащиеся внутри. Кто-нибудь знает, что здесь происходит?
Как этот эффект вызовы object.filter? Я предполагаю, что __id будет иметь обработчик дескриптора базы данных с соединением, тогда как _id вернет все объекты в таблице MyModel и выполнит фильтрацию в django. Или они оба фильтруют в базе данных, но __id касается двух таблиц, а _id касается только одного? – blackfedora
@blackfedora У вас есть инструменты для просмотра SQL-запросов – wRAR
Спасибо, проверяя с .query, похоже, что одни и те же запросы mysql генерируются в любом случае. – blackfedora