【问题标题】:Django query with related models shows only fields of one model具有相关模型的 Django 查询仅显示一个模型的字段
【发布时间】:2011-12-02 09:04:29
【问题描述】:

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

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

我们将不胜感激。

【问题讨论】:

  • 你输出invoice_select的具体情况如何?如果你只是把{{ invoice_select }} 放在你的视图中,Django 基本上会输出:{{ invoice_select.__unicode__() }}。如果您想输出更多或不同的输出,则需要编辑视图。
  • 你能给我一个例子请如何访问其他字段

标签: django django-select-related


【解决方案1】:

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

【讨论】:

  • 我不知道如何访问相关对象的字段。请给我一个例子好吗?
【解决方案2】:

当您将对象称为字符串时,会自动调用 __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()

【讨论】:

  • 单独的方法看起来如何?能给我举个例子吗?
  • 是否可以在视图中生成另一个模型上的第二个查询,并通过一个 return_to_response 调用将两个不同查询的结果传递给模板?
  • 我会用一个简单的方法更新条目,但应该很简单。我不确定您的第二条评论到底在问什么,这可能值得单独发帖。
猜你喜欢
  • 2011-08-05
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 2015-07-26
  • 2020-01-11
  • 2020-03-05
  • 2015-08-31
  • 1970-01-01
相关资源
最近更新 更多