他のテーブルと結合する複雑なクエリセットを構築しようとしています。ここで私を悩ませているのは、queryset.query を出力するとクエリを見ることができるが、コードから呼び出すと結果が返されないことです。
class CarManager(models.Manager):
def get_query_set(self):
return super(CarManager, self).get_query_set().filter(version_to__isnull=True)
def my_cars(self, language, user):
qs=self.extra(
select = {
'make_display' : '`%s`.`%s`' % (ModelLookUpI18n._meta.db_table, ModelLookUpI18n._meta.get_field('make_display').column),
'model_display' : '`%s`.`%s`' % (ModelLookUpI18n._meta.db_table, ModelLookUpI18n._meta.get_field('model_display').column),
'trim_display' : '`%s`.`%s`' % (ModelLookUpI18n._meta.db_table, ModelLookUpI18n._meta.get_field('trim_display').column),
},
tables = [
'`%s`' % ModelLookUpI18n._meta.db_table,
],
where = [
'`%s`.`%s` = `%s`.`%s`' % (ModelLookUpI18n._meta.db_table, ModelLookUpI18n._meta.get_field('model').column, ModelLookup._meta.db_table, ModelLookup._meta.get_field('id').column),
"`%s`.`%s`='%s'" % (ModelLookUpI18n._meta.db_table, ModelLookUpI18n._meta.get_field('language').column, language)
]
).select_related().filter(created_by=user).order_by('-created_at')
print qs.query # prints the SQL statement
print qs # always prints []
return qs
コンソールに出力されたクエリをコピーして mySQL ターミナルに貼り付けると、21 個のレコードが表示され、非常に正常に見えます。それでも、クエリセットは常に空です。さらにデバッグする方法についてのアイデアはありますか?
ああ、MYSQL 実行ログを監視して、エンジンに送信されるものが qs.query によって出力されたものと一致していることを確認しました。