2017-09-13 64 views
1

后,我发现它难以实现以下情形:编辑另一个模型创建实例

在我的应用程序,用户创建了一个项目,现在这个项目,他可以链接之前的团队,他创造或建立一个新的团队。

一个团队可以成为许多项目的一部分,但一个项目仅与一个团队相关联。

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

您是否尝试过使用模型继承? –

+0

当一个团队被创建​​时,你想创建一个相应的项目?自动? – Bestasttung

+0

否..当创建一个项目时,用户被要求提供一个名字,team_id是空的。然后用户创建一个团队..我希望当团队创建team_id从空白更改为刚刚创建的团队的ID – Ben2pop

回答

1

那么,你可以得到你的用户id有一个team_id null的项目。 在你TeamCreate()鉴于form_valid方法:

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 

在这里,你只得到其中有您的用户为管理员和空TEAM_ID项目。

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

所以你必须确定它将永远是一个项目,然后创建一个团队。

希望它有帮助。

+0

Thx为您的答案,但它引发了一个错误:raise FieldError('Related Field无效查找:{}'。format(lookups [0])) django.core.exceptions.FieldError:相关字段无效查找:is_null – Ben2pop

+0

您可以用'''team_id_id__is_null = True'''尝试吗? – Bestasttung

+0

我得到了相同的结果: 异常类型:FieldError在/网站/ addteam/ 异常值:相关字段无效查找:is_null – Ben2pop

相关问题