我試圖根據名稱過濾成員並返回成員和關聯公司。我的模型是:如何在django中使用外鍵上的過濾器「group by」
class Member(models.Model):
first_name = models.CharField(max_length=40, blank=False, null=False)
last_name = models.CharField(max_length=40, blank=False, null=False)
class Affiliation(models.Model):
member = models.ForeignKey(Member)
company = models.ForeignKey(Company)
date_entered = models.DateField(null = False, blank = False)
date_exited = models.DateField(null = True, blank = True)
class Company(models.Model):
name = models.CharField(max_length = 100)
,然後我想在成員搜索,發現每個人的名字某些字符串相匹配,並告訴他們都擁有各自公司的隸屬關係一起。因此,對於搜索我可以這樣做:
def member_search(request):
member_list = Member.objects.filter(
Q(first_name__icontains=request.POST['q'].lower()) |
Q(last_name__icontains=request.POST['q'].lower()))
return render_to_response('member/member_list.html', {'member_list': member_list })
或
def member_search2(request):
affiliation_list = Affiliation.objects.filter(
Q(member__first_name__icontains=request.POST['q'].lower()) |
Q(member__last_name__icontains=request.POST['q'].lower()))
return render_to_response('member/member_list2.html', {'affiliation_list': affiliation_list })
在第一種情況下,模板會是這樣的:
<ul>
{% for member in member_list %}
<li>
<a href="/member/{{ member.pk }}">view</a>
<a href="/member/{{ member.pk }}/update">edit</a>
{{ member.first_name }} {{ member.last_name }}
{{ member.affiliation.all ??? }}
</li>
{% endfor %}
</ul>
,但我看不出如何扭轉回通過Affiliation ForeignKey。我懷疑我的過濾器將不得不改變,但我不明白如何。
,並在第二種情況下它會是這樣的:
<ul>
{% for affiliation in affiliation_list %}
<li>
<a href="/member/{{ affiliation.member.pk }}">view</a>
<a href="/member/{{ affiliation.member.pk }}/update">edit</a>
{{ affiliation.member.first_name }} {{ affiliation.member.last_name }}
{{ affiliation.member.company.name }}
</li>
{% endfor %}
但後來我得到多行的成員,如果它們與多個公司下屬。我看了一下彙總,但在這種情況下並不清楚,因爲我也想列出這些公司。
我想要的到底是什麼:
member 1 (company 1 [entry date], company 2 [entry date])
member 2 (company 1 [entry date])
member 3 (company 2 [entry date])
這是非常有可能的另一個問題重複,但我還沒有發現這個問題:-)。這似乎是人們想要做的常見事情。
想一想更多我想我傾向於第二種方法,因爲我真的很想有'會員1(公司1 [入會日期])等等 – brechmos