我对django并不陌生,并且想知道在这里满足我的要求的最有效方法。我正在创建一个项目跟踪应用程序,其中一个项目可以有许多团队成员和clientteam成员以及多个反馈。我有一个单独的团队成员和客户团队表,但我也想跟踪项目中每个团队成员的角色。
我使用映射表尝试了以下模型结构,但现在我正努力从中获取数据到Django模板。
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.urls import reverse
class Project(models.Model):
title = models.CharField(max_length=200)
description = models.CharField(max_length=300)
primary_contact1 = models.CharField(max_length=100)
primary_contact2 = models.CharField(max_length=100)
start_date = models.DateField()
end_date = models.DateField()
owner = models.ForeignKey(User, on_delete=models.CASCADE)
date_created = models.DateTimeField(default=timezone.now)
date_last_modified = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('project-detail', kwargs={'pk': self.pk})
class Teammember(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
email = models.CharField(max_length=50)
def __str__(self):
return self.first_name + " " + self.last_name
def get_absolute_url(self):
return reverse('teammember-detail', kwargs={'pk': self.pk})
class ProjectTeam(models.Model):
project_team_member = models.ForeignKey(Teammember, related_name="project_team_member", on_delete=models.SET_NULL, null=True)
project = models.ForeignKey(Project, related_name="project_team_project", on_delete=models.CASCADE)
project_role = models.CharField(max_length=50)
def __str__(self):
return self.project.title + " - " + self.project_team_member.first_name + " - " + self.project_role
class Timesheet(models.Model):
week_start_date = models.DateField()
week_hours = models.IntegerField()
project = models.ForeignKey(Project, related_name="ts_project", on_delete=models.CASCADE)
project_team_member = models.ForeignKey(Teammember, related_name="ts_project_team_member", on_delete=models.CASCADE)
def __str__(self):
return self.project.title + " - " + self.project_team_member.first_name + " - " + self.week_start_date.strftime('%b/%d/%Y') + " - " + str(self.week_hours)
def get_absolute_url(self):
return reverse('timesheet-detail', kwargs={'pk': self.pk})
class Clientteam(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
email = models.CharField(max_length=50)
location = models.CharField(max_length=50)
designation = models.CharField(max_length=50)
assigned_lead = models.ForeignKey(Teammember, related_name="assigned_lead", on_delete=models.SET_NULL, null=True)
lead_generator = models.ForeignKey(User, related_name="lead_generator", on_delete=models.SET_NULL, null=True)
date_created = models.DateTimeField(default=timezone.now)
date_last_modified = models.DateTimeField(auto_now=True)
def __str__(self):
return self.first_name + " " + self.last_name
def get_absolute_url(self):
return reverse('clientteam-detail', kwargs={'pk': self.pk})
class ProjectClientTeam(models.Model):
project_clientteam_member = models.ForeignKey(Clientteam, related_name="project_clientteam_member", on_delete=models.SET_NULL, null=True)
project = models.ForeignKey(Project, related_name="project_client_team_project", on_delete=models.CASCADE)
project_role = models.CharField(max_length=100)
def __str__(self):
return self.project.title + " - " + self.project_client_teammember.first_name + " - " + self.project_role
class Feedback(models.Model):
overall_score = models.IntegerField()
overall_desc = models.CharField(max_length=200)
date_received = models.DateTimeField()
project = models.ForeignKey(Project, related_name="feedback_project", on_delete=models.CASCADE)
clientteam = models.ForeignKey(Clientteam, related_name="feedback_clientteam", on_delete=models.CASCADE)
def __str__(self):
return self.project.title + " - " + self.clientteam.first_name
def get_absolute_url(self):
return reverse('feedback-detail', kwargs={'pk': self.pk})
在模板中,我正在遍历项目并显示其所有字段,并希望遍历给定项目的所有团队成员和客户团队成员。我尝试了以下语法,但未显示任何数据:
{% for proj_m in projects.project_client_team_member_set.all %}
<li><a class="article-text" href="{% url 'clientteam-detail' proj_m.id %}">{{ proj_m.first_name }} {{ proj_m.last_name }}</a> ( {{ proj_m.project_role }} )</li>
{% endfor %}
在我的情况下,模型结构可以更有效吗?如果不是,我在这里想直接从父级访问子级记录吗?
谢谢。