0

我有三个相关的模型,并希望进行查询以获取所有三个模型的字段组合。

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__ 方法。您可以简单地将您关心的字段放在 __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__ 方法。

另请注意,如果制造商可能为空,您需要处理它,也许使用 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 回答
1

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

于 2011-10-06T16:25:12.190 回答