2017-03-10 14 views
0

私は 'project_list'と 'project_detail'ページを持っています。 'project_detail'ページの中には、現在のプロジェクトに新しいメンバーを追加できる 'project_members'ページにユーザーをリダイレクトするボタンがあります。新しい作成されたメンバーを現在のプロジェクトに関連付ける方法。私は少し見ると混乱している。それを実現する最善の方法は何ですか?新しいレコードと特定のオブジェクトの関連付け

models.py

class Project(models.Model): 
    ***FIELDS*** 
    members = models.ManyToManyField(User, through='Membership',) 

ROLE_CHOICES = (
     ('manager', 'Manager'), 
     ('developer', 'Developer'), 
     ('business_analyst', 'Business analyst'), 
     ('system_analysts', 'System analysts'), 
) 

class Membership (models.Model): 
    user = models.ForeignKey(User, on_delete=models.CASCADE,) 
    project = models.ForeignKey(Project, on_delete=models.CASCADE) 
    role = models.CharField(max_length=20, choices=ROLE_CHOICES,) 

forms.py

class ProjectMembersForm(forms.ModelForm): 
    class Meta: 
     model = Membership 
     exclude = ('project',) 

    def __init__(self, *args, **kwargs): 
     super(ProjectMembersForm, self).__init__(*args, **kwargs) 
     self.fields['role'].choices = tuple(choice for choice in ROLE_CHOICES if choice[0] not in ['manager']) 

urls.py

urlpatterns = [ 
    url(r'^project/(?P<slug>[-\w]+)/$', project_detail, name='project_detail'), 

    url(r'^project/(?P<slug>[-\w]+)/members$', project_members, name='project_members'), 
] 

view.py

def project_members(request, slug): 
    if slug: 
     if request.method == 'POST': 
      members_form = ProjectMembersForm(request.POST) 
      if members_form.is_valid(): 
       members_form.save() 
      else: 
       members_form = ProjectMembersForm(instance=request.user) 
      return render(request, 'project/project_members.html', {'members_form': members_form,}) 
+0

ので、フォームは 'User'テーブル内のすべてのユーザーを表示し、プロジェクトにメンバーとして、それらを追加/削除できるようにする必要がありますか? – Udi

+0

どのように: 'NON_MAANGER_CHOICES = ROLE_CHOICES [1:]'? – Udi

答えて

0

最後に、数日前に回答が見つかりました。あなたはviews.pyにこれを追加必要があります。

*** 
new_member = form.save(commit=False) 
new_member.project = project # Add this line 
new_member.save() 
*** 
関連する問題