這是一個在Django 中多對多的範例。在系統中,先秀出目前參加任務的隊伍有哪些,每隊的組員有誰。
我們定義一個myteamtask跟group 的多對多關係
定義urls.py
path('my_team_tasks_link/', views.my_team_tasks_link, name='my_team_tasks_link'),
path('create_team_tasks/', views.my_team_tasks_link, name='create_team_tasks'),
my_team_tasks_link 有兩種寫法,先來介紹第一種用through的寫法
第8行取得所有team_tasks中結束日期比今天晚而且活動有效的任務,從任務叢集中找到所有的群組。第22行的group.group指的是MyTeamTask的group
class MyTeamTask(models.Model):
group = models.ManyToManyField(Group,related_name='group')
group.group.through 指的是django 自動生成的myteamtask_group
myteamtask_ids = group.group.through.objects.filter(group_id=id).values('myteamtask_id')
指的就是mytaemtask_group 的myteamtask_id
這邊就是從task->group->through->myteamtask_id 這樣找下來。再利用list 與 set 兜成
[{‘task_name’: ‘募集點數’, ‘group_list’: [{‘group’: ‘史上最大天團沒有之一’, ‘group_id’: 1, ‘users’: [‘吳六六’, ‘李小四’, ‘張小三’]}, {‘group’: ‘史上最臭貓咪沒有之一’, ‘group_id’: 2, ‘users’: [‘吳六六’, ‘張小三’, ‘李小四’]}]}]
在html 中,需要用for each 層層拆掉
在views.py 中的my_team_tasks_link 另一種寫法是透過values 找到myteamtask_id
Group.objects.filter(id=id).values(‘group__user_id’)