2011-09-28 21 views
0

我有一个问题,我希望有人可以帮助我。我正在使用表单让用户选择一个“计划”。现在我想在表单中列出计划中的所有成员。我有一个函数“get_owners”,抓住计划中的所有成员,通过使用该功能:Django planmember_set问题

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

唯一的问题是,我得到的输出:

[<PlanMember: Doe, John (Primary)>, <PlanMember: Doe, Jane(Joint Subscriber)>, etc] 

现在有没有办法让我只显示他们的名字和成员类型(括号内的单词)?

有点背景代码。

这里是我的views.py:

if request.POST: 
    form = PlanMaturityYearForm(Plan.objects.all().filter(profile = p), request.POST) 
    if form.is_valid(): 
     selected_plan = form.cleaned_data['plans'] 
     plan = get_object_or_404(Plan, pk=selected_plan.pk) 
     investment_list = Investment.objects.all().filter(Q(plan = plan)).order_by('maturity_date') 
     context['investment_list'] = investment_list 
     context['plan'] = plan 
     context['today'] = now 
     context['current_yr'] = current_year 
     context['next_yr'] = next_year 
     context['show_report'] = True 
else: 
    form = PlanMaturityYearForm(Plan.objects.all().filter(profile = p)) 
context['form'] = form 
return render_to_response('reports/planmaturities_year.html', RequestContext(request, context)) 

而且我forms.py:

class PlanMaturityYearForm(forms.Form): 
def __init__(self, plans, *args, **kwargs): 

    super(PlanMaturityYearForm, self).__init__(*args, **kwargs) 
    self.fields['plans'] = forms.ModelChoiceField(
     plans, 
     required=True, 
     widget=forms.Select(attrs={'size': 20}), 
     error_messages={'required':'Please select the plan you wish to build the report for',} 
    ) 

编辑:

models.py

class Plan(models.Model): 
old_id = models.IntegerField(null=True) 
closed = models.BooleanField(default=False, blank=True) 
closed_date = models.DateField(null=True) 
profile = models.ForeignKey(Profile, default=False) 
plan_type = models.ForeignKey(PlanType) 
ownership_type = models.ForeignKey(OwnershipType) 
status = models.PositiveSmallIntegerField(max_length=2, default=PLAN_OPEN) 
timestamp = models.DateTimeField(auto_now_add=True, null=True, blank=True) 
notes = HTMLField(blank=True, null=True) 
bank = models.CharField(max_length=50, blank=True, null=True) 
account = models.CharField(max_length=50, blank=True, null=True) 
transit = models.CharField(max_length=50, blank=True, null=True) 
objects = PlanManager() 

class Profile(models.Model): 
old_id = models.IntegerField(null=True, blank=True) 
label = models.CharField(max_length=255, blank=True, verbose_name='Profile label/description') 
location = models.ForeignKey(Location, null=True, blank=True) 
client = models.BooleanField(default=False, blank=True) 
corp = models.BooleanField(default=False, blank=True) 
noncorp = models.BooleanField(default=False, blank=True) 
timestamp = models.DateTimeField(auto_now_add=True, default=False) 
bak_agent_id = models.CharField(max_length=10, null=True, blank=True) 
agent = models.ForeignKey(Agent, related_name='profiles') 
check1 = models.BooleanField(default=False, blank=True) 
incorp_date = models.DateField(null=True, blank=True) 
corp_records = models.BooleanField(default=False, blank=True) 
articles_of_incorp = models.BooleanField(default=False, blank=True) 
other_corp_articles = models.CharField(max_length=50, null=True, blank=True) 
bin = models.CharField(max_length=50, null=True, blank=True, verbose_name='BIN') 
phone = models.CharField(max_length=25, null=True) 
registration = models.CharField(max_length=45, null=True, blank=True) 
num_sigs = models.IntegerField(max_length=1, null=True, blank=True, 
     verbose_name='Number of signatures required to transaction the account') 
charity = models.BooleanField(default=False, blank=True) 
donations_solicited = models.BooleanField(default=False, blank=True) 
ownership_type = models.CharField(max_length=45, null=True, blank=True) 
ownership_other = models.CharField(max_length=45, null=True, blank=True) #work around for other business type selction 
business_nature = models.CharField(max_length=45, null=True, blank=True) 
date_incept = models.DateField(null=True, blank=True) 
bind_power = models.BooleanField(default=False, blank=True) 
reg_documents = models.BooleanField(default=False, blank=True) 
other_documents = models.CharField(max_length=50, null=True, blank=True) 
reg_number = models.CharField(max_length=45, null=True, blank=True) 
tax_number = models.CharField(max_length=45, null=True, blank=True) 
phone = models.CharField(max_length=25, null=True, blank=True) 
fax = models.CharField(max_length=25, null=True, blank=True) 
email = models.CharField(max_length=100, null=True, blank=True) 

回答

0

你能够 使用values_list

owners = self.planmember_set.filter(
      ownership_type__code__in=["primary","joint"] 
     ).values_list('name', 'type') 
+0

其中名称和类型是我想要显示的字段? – TheLifeOfSteve

+0

@Steve是的,没错。 –

+0

谢谢...我正在接近。最后一个问题......现在我得到了'7779L,6L'的输出。思考? – TheLifeOfSteve

0
def get_owners(self): 
    owners = self.planmember_set.filter(ownership_type__code__in=["primary","joint"]).values_list('name_field', 'ownership_type__code') 
    return owners 

写到哪,你如何如不正确使用get_owners

+0

是的,这似乎有帮助,但是就像我为丹尼尔发布的那样,现在我得到的输出是'7779L,6L'。有什么建议么? – TheLifeOfSteve

+0

向我们展示'get_owners'的用法 – ArturM