我发现很难实现以下方案:
在我的应用中,用户创建了一个项目,现在他可以链接他创建的前一个团队或创建一个新团队。
团队可以成为许多项目的一部分,但项目只与一个团队相关联。
models.py :
class Team(models.Model):
team_name = models.CharField(max_length=100, default = '')
team_hr_admin = models.ForeignKey(MyUser, blank=True, null=True)
def __str__(self):
return self.team_name
class TeamMember(models.Model):
user = models.ForeignKey(MyUser)
team = models.ForeignKey(Team)
def __str__(self):
return self.user.first_name
class Project(models.Model):
name = models.CharField(max_length=250)
team_id = models.ForeignKey(Team, blank=True, null=True)
project_hr_admin = models.ForeignKey(MyUser, blank=True, null=True)
def get_absolute_url(self):
return reverse('website:ProjectDetails', kwargs = {'pk' : self.pk})
def __str__(self):
return self.name
views.py :
class ProjectCreate(CreateView):
model = Project
fields = ['name']
template_name = 'project_form.html'
def form_valid(self, form):
form.instance.project_hr_admin = self.request.user
return super(ProjectCreate, self).form_valid(form)
class ProjectDetailView(generic.DetailView):
model = Project
template_name = 'project_details.html'
class TeamCreate(CreateView):
model = Team
fields = ['team_name']
template_name = 'team_form.html'
def form_valid(self, form):
obj = form.save(commit=False)
obj2 = Project.team_id
obj2 = obj.team_id
obj2.save()
print("sucess")
我希望当用户创建团队时,以及团队是否成功创建。使用相应的team_id
自动添加到项目模型。
任何帮助将不胜感激。提前谢谢!
答案 0 :(得分:1)
好吧,您可以使用您的用户ID获取项目,该项目的team_id为null。
在form_valid
视图的TeamCreate()
方法中:
def form_valid(self, form):
valid = super(TeamCreate, self).form_valid(form)
obj = form.save()
obj2 = Project.objects.get(project_hr_admin=self.request.user, team_id=None)
obj2.team_id = obj
obj2.save()
return valid
在这里,您只需获得项目,其中您的用户为admin,null为team_id。
警告但是,如果管理员创建了两个没有团队的项目,请求Project.objects.get(...)
将引发错误,因为它将返回多个对象。
因此,您必须确保它始终是一个项目,然后创建一个团队。
希望它有所帮助。