0

私のモデルには次のものがあります。

 class info(models.Model):
     add = models.CharField(max_length=255)
     name = models.CharField(max_length=255)

info_l = info.objects.filter(id=1) logging.debug(info_l.name) と言うと、ビューに表示されます

デバッグ ステートメントに名前が存在しないというエラーが表示されます。'QuerySet' オブジェクトには属性 'name' がありません 1.これを解決するにはどうすればよいですか。2.select name from infoのようにすべてを選択するのではなく、1つのフィールドのみを照会する方法。

4

1 に答える 1

2

1. 単品の選択

単一のオブジェクトを取得しようとしているようです。Usingはオブジェクトfilterを返しQuerySetます (コードで起こっているように)。これはリストのように動作します (そして、お気づきのように、name属性がありません)。

ここには 2 つのオプションがあります。まず、最初の要素を取得できます。

info_l = info.objects.filter(id=1)[0]

代わりにメソッドを使用することもできます。このobjects.getメソッドは、単一のオブジェクトを返します (存在しない場合は例外を発生させます)。

info_l = info.objects.get(id=1)

Django には QuerySets に関する非常に優れたドキュメントがいくつかあり
ます
QuerySet

2. 特定のフィールドの取得

Django にはdeferandonlyメソッドが用意されており、一度にすべてを取得するのではなく、データベースから特定のフィールドを選択できます。これらは実際にはフィールドの読み取りを妨げません。むしろ、遅延ロードします。 deferは「オプトイン」モードであり、遅延ロードするフィールドを指定できます。 only「out-out」です。これを呼び出すと、渡されたフィールドのみが積極的にロードされます。

したがって、あなたの例では、次のようなことをしたいと思うでしょう:

info_l = info.objects.filter(id=1).only('name')[0]

あなたが与える例と同じくらい単純なモデルではありますが、フィールドの制限についてはあまり心配しません。

于 2010-03-25T05:33:08.230 に答える