0

例外が発生すると予想されるクエリがありますUnknown column 'foo.bar' in 'field list'。しかし、1.4 Django では、例外が飲み込まれたようで、空のクエリセットが返されます。

In [1]: Foo.objects.all()
Out[1]: []

In [2]: from django.db import connection

In [3]: connection.queries
Out[3]: 
[{'sql': 'SELECT ..`foo`.`bar` ...',
  'time': '0.001'}]

一方、データベース内の同じクエリ:

mysql> SELECT ..`foo`.`bar` ...;
ERROR 1054 (42S22): Unknown column 'foo.bar' in 'field list'

(私がそう信じている) 古い動作を元に戻すことはできますか?

リリース ノートのどこでこの変更を見逃していましたか?

connection.queriesこれは、クエリセットの遅延実行の問題ではないことに注意してください。クエリセットを印刷すると、クエリが実行されます。

In [1]: from django.db import connection

In [2]: connection.queries
Out[2]: []

In [3]: q = Foo.objects.all()

In [4]: connection.queries
Out[4]: []

In [5]: print q
Out[5]: []

In [6]: connection.queries
Out[6]:
[{'sql': 'SELECT ...
4

1 に答える 1

0

コメントで述べたように、クエリセットは Django では遅延しています。そのため、使用しようとするまでエラーは発生しません (例: クエリセットに対する iter)。ここにドキュメントへのリンクがあります。

これは Django の新しい動作ではありません。1.1、1.2、および 1.3 の同じドキュメントを見つけることができます。

お役に立てれば。

于 2012-09-24T23:46:04.077 に答える