2011-09-28 23 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