创建实例后编辑另一个模型

2024-04-25 04:39:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我发现很难实现以下场景:

在我的应用程序中,用户创建了一个项目,现在他可以将以前创建的团队链接到该项目,或者创建一个新团队。你知道吗

一个团队可以是许多项目的一部分,但一个项目只与一个团队相关联。你知道吗

型号.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 

视图.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自动添加到项目模型。你知道吗

任何帮助都将不胜感激。提前谢谢!你知道吗


Tags: 项目nameselfformprojectidtruereturn
1条回答
网友
1楼 · 发布于 2024-04-25 04:39:20

好吧,你可以用你的用户id得到这个项目,它的团队id为空。 在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,团队id为空

但是警告:如果管理员创建两个没有团队的项目,请求Project.objects.get(...)将引发错误,因为它将返回多个对象。你知道吗

因此,您必须确保它始终是一个项目,然后创建一个团队。你知道吗

希望有帮助。你知道吗

相关问题 更多 >