尝试格式化返回的_set

时间:2011-10-13 18:44:11

标签: python django django-models django-templates

我正在尝试使用计划列表填充表单。

这是我的计划模型的unicode

def __unicode__(self):
    label = "ID: %s, Member(s): %s, Plan Type: %s" % (self.id, self.get_owners(), self.plan_type)
    return unicode(label)

现在我调用get_owners,如下所示:

def get_owners(self):
    owners = self.planmember_set.filter(ownership_type__code__in=["primary","joint"])
    return owners

但我的输出显示:

[<PlanMember: Name, [membership_type]><PlanMember: Name, etc etc>]

如何在没有括号的情况下显示输出,以及更多内容:

Name [membership_type], Name [membership_type], etc

3 个答案:

答案 0 :(得分:1)

您只是从get_owners返回原始查询集,而Python正在调用repr()以将其插入字符串中。

最好的办法是在get_owners

中进行格式化
def get_owners(self):
    owners = ...
    return u", ".join(unicode(o) for o in owners)

答案 1 :(得分:0)

您的get_owners方法正在做它应该做的事情:返回一组所有者。在您的模板中,您可以遍历这些所有者并显示它们,但是您喜欢:

{% for owner in plan.get_owners %}
    {{ owner }}
{% endfor %}

或者,在其他python代码中,您可以根据需要将其组成一个字符串:

def __unicode__(self):
    owners = u', '.join(self.get_owners())
    label = "ID: %s, Member(s): %s, Plan Type: %s" % (self.id, owners, self.plan_type)
    return unicode(label)

模型方法不应强制显示;他们应该只返回数据。 (除了明显的例外情况,例如__unicode__,特别是关于如何将模型显示为unicode文本。)

答案 2 :(得分:0)

您似乎需要像__unicode__一样向PlanMember添加Plan方法。

def __unicode__(self):
    label = "Name: %s, [%s]" % (self.name, self.membership_type)
    return unicode(label)