2011-10-13 25 views
0

我試圖用計劃列表填充我的表單。試圖格式化返回的_set

這裏是我的計劃模型

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(如下所示)的Unicode:

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 

回答

1

您剛剛從get_owners返回原始查詢集,並且Python正在調用repr()來將其插入到字符串中。

最好的辦法是內get_owners做格式:

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

當我嘗試,即時通訊顯示此錯誤: '陷入類型錯誤而渲染:序列項0:期望的字符串,PlanMember found' – TheLifeOfSteve

+0

試試這個更新版本。 –

+0

完美的作品丹尼爾。感謝你的幫助。 – TheLifeOfSteve

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文本明顯的例外。)

+0

我得到了與丹尼爾斯響應相同的錯誤。我知道你可以在模板上循環,但是如果它正在嘗試填充的表單域而不僅僅是在模板上顯示信息呢? – TheLifeOfSteve

0

它看起來像你需要爲你爲Plan一個__unicode__方法添加到PlanMember

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

已經有了,但是謝謝 – TheLifeOfSteve

+0

'__repr__'方法可能是你正在尋找的。 –