具有相关模型的Django查询仅显示一个模型的字段

时间:2011-10-06 15:46:23

标签: django django-select-related

我有三个相关的模型,想要查询以获得所有三个模型的字段组合。

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中的字段不会显示在查询结果中?

任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

您只是查看对象的字符串表示,显然使用__unicode__方法。当然,如果您直接访问对象,那么这些字段就在那里。

答案 1 :(得分:1)

当您将对象称为字符串时,会自动调用__unicode__方法。您可以简单地将您关心的字段放在__unicode__方法中(假设是制造商型号):

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()