0

関連するモデルが3つあり、3つのモデルすべてからフィールドの組み合わせを取得するためのクエリを作成したいと思います。

invoice_select = Ordered_item.objects.filter(oi_order = o_id).select_related()

debug_toolbarで確認できるSQLステートメントを生成します。SQLステートメントには、関連するモデルのすべてのフィールドが含まれています。

クエリの結果を次のHTMLファイルに送信します。

 return render_to_response('invoice_select.html', {'invoice_select':invoice_select} 

Ordered_itemモデルに対して定義された式のみを次のように提供します。

   def __unicode__(self):
   return u'%s -- %s -- %s' % (self.oi_order, self.oi_pos, self.oi_item) 

したがって、クエリの結果は次のようになります。

{'invoice_select': [<Ordered_item: 1109231733 -- 01 -- BP-0516-aa>]} 

これは、def unicode(self) で定義されているフィールドとまったく同じです。

クエリの結果にフィールドを追加するにはどうすればよいですか?SQLのフィールドがクエリの結果に表示されないのはなぜですか?

どんな助けでも大歓迎です。

4

2 に答える 2

1

オブジェクトの文字列表現を見ているだけで、明らかに__unicode__メソッドを使用しています。もちろん、オブジェクトに直接アクセスする場合、フィールドはそこにあります。

于 2011-10-06T16:25:12.190 に答える
1

オブジェクトを文字列として参照すると、__unicode__ メソッドが自動的に呼び出されます。気になるフィールドを単純に __unicode__ メソッドに入れることができます (Manufacturer モデルを想定):

def __unicode__(self):
   return u'%s -- %s -- %s -- %s -- %s' % (self.oi_order, self.oi_pos, self.oi_item,
       self.manufacturer.name, self.manufacturer.favorite_stuffed_animal) 

他のものに使用される __unicode__ メソッドにそれを入れたくない場合は、簡単に別のメソッドに入れて、暗黙的に __unicode__ メソッドを呼び出すのではなく、そのメソッドを直接呼び出すことができます。

さらに、製造元が null である可能性がある場合は、おそらく try-catch ブロックを使用してそれを処理する必要があることに注意してください。

別のメソッドは次のようになります。

def get_str(self):
    return u'%s %s' % (self.oi_order, self.manufacturer.name)

次に、インスタンス化された oi がある場合:

str = oi.get_str()
于 2011-10-07T05:02:05.063 に答える