【问题标题】:Trying to format returned _set尝试格式化返回的 _set
【发布时间】:2011-10-13 18:44:10
【问题描述】:

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

这是我的计划模型的 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

【问题讨论】:

    标签: python django django-models django-templates


    【解决方案1】:

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

    最好的办法是在get_owners 内进行格式化:

    def get_owners(self):
        owners = ...
        return u", ".join(unicode(o) for o in owners)
    

    【讨论】:

    • 我在尝试时显示此错误:Caught TypeError while rendering: sequence item 0: expected string, PlanMember found
    【解决方案2】:

    您的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 文本。)

    【讨论】:

    • 我收到与 Daniels 响应相同的错误。我知道你可以在模板上循环,但如果它是你试图填充的表单字段而不只是在模板上显示信息呢?
    【解决方案3】:

    您似乎需要向 PlanMember 添加一个 __unicode__ 方法,就像为 Plan 所做的那样。

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

    【讨论】:

    • __repr__ 方法可能是您正在寻找的。​​span>
    猜你喜欢
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    相关资源
    最近更新 更多