2017-09-17 6 views
0

私のアプリのユーザーは、プロジェクトを作成してからチームを作成し、チームメンバーにメールを送ってアプリにサインアップしてもらいます。 私は招待されたユーザーを直前に作成されたチームに追加する方法を理解しようとしています。 私は使ってみました:TeamMember.user = userだが明らかに動作しません;) それを動作させる手助けをしてもらえますか?別のモデルからデータを抽出して保存する

登録/ views.py:

def TeamRegister(request): 
    if request.method == 'POST': 
     form = TeamMembersForm(request.POST) 
     if form.is_valid(): 
      user = form.save(commit=False) 
      password = MyUser.objects.make_random_password() 
      user.set_password(password) 
      user.is_active = False 
      user.is_employee = True 
      TeamMember.user = user 
      user.save() 
      u1 = user.id 
      a1 = MyUser.objects.get(email = request.user.email) 
      a2 = Project.objects.filter(project_hr_admin = a1) 
      a3 = a2.latest('id') 
      a4 = a3.team_id 
      a4.members.add(u1) 
      current_site = get_current_site(request) 
      message = render_to_string('acc_active_email.html', { 
       'user':user, 
       'domain':current_site.domain, 
       'uid': urlsafe_base64_encode(force_bytes(user.pk)), 
       'token': account_activation_token.make_token(user), 
      }) 
      mail_subject = 'You have been invited to SoftScores.com please sign in to get access to the app' 
      to_email = form.cleaned_data.get('email') 
      email = EmailMessage(mail_subject, message, to=[to_email]) 
      email.send() 
      return HttpResponse('An email have been sent to your user asking him to sign in') 

    else: 
     form = TeamMembersForm() 

    return render(request, 'team_register.html', {'form': form}) 

アプリ/ models.py

class Team(models.Model): 
    team_name = models.CharField(max_length=100, default = '') 
    team_hr_admin = models.ForeignKey(MyUser, blank=True, null=True) 
    members = models.ManyToManyField(MyUser, related_name="members") 


    def __str__(self): 
     return self.team_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 

答えて

0

あなたは何とかとしてもチームを特定する必要があります。

# Just one suggestion of how this could be done, but this shouldn't work out of the box 
TeamMember.objects.create(user_id=user.id, 
          team_id=Team.objects.get(id=form.cleaned_data['team_id'])) 

をそして、あなたのモデル用として、はジャンゴでのM2Mの関係にDjangoのドキュメントを参照してください:あなたはビュー内のチームを持っている場合は、あなただけのようなTeamMemberオブジェクトを作成することができますhttps://docs.djangoproject.com/en/1.11/topics/db/examples/many_to_many/

ManyToManyFieldを作成し、TeamMemberthroughモデルとして使用するか、まったく削除してください。これはDjangoが自動的に生成するためです。

+0

チームメンバーモデルを削除し、チームメンバーのチームに属性を追加することをお勧めしますか? – Ben2pop

+0

多対多リレーションシップの中間モデルを使用すると、関連マネージャのメソッドの一部が無効になることがあるため、これらのモデルの一部ではこのようなモデルでは機能しません。 – Ben2pop

+0

@ Ben2pop 'TeamMember'モデルにフィールドを追加するつもりがないなら、削除することをお勧めします。 – makaveli

関連する問題