Попытка отформатировать возвращенный _set - PullRequest
0 голосов
/ 13 октября 2011

Я пытаюсь заполнить мою форму списком планов.

Вот мой юникод для модели планов

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 ]

1 голос
/ 13 октября 2011

Вы просто возвращаете необработанный набор запросов из get_owners, и Python вызывает repr() для этого, чтобы вставить его в строку.

Лучше всего сделать форматирование в get_owners:

def get_owners(self):
    owners = ...
    return u", ".join(unicode(o) for o in owners)
0 голосов
/ 13 октября 2011

Похоже, вам нужно добавить __unicode__ метод к PlanMember, как вы это сделали для Plan.

def __unicode__(self):
    label = "Name: %s, [%s]" % (self.name, self.membership_type)
    return unicode(label)
0 голосов
/ 13 октября 2011

Ваш метод 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.)

...