2017-12-07 9 views
0

今はモデルフィールドに1つのフィールドはありませんが、モデルには3つのフィールドがあります。フォームで設定すると、デフォルトではfalseに設定されています。最後にはビューに設定されますが、idkなぜそれが正しく行われません。Django - フォームにはないがモデルにあるフィールドに試してみよう

モデル&フォーム。

class TeamMembership(models.Model): 
    user = models.ForeignKey(User) 
    team = models.ForeignKey(Team) 
    leader = models.BooleanField(default=False) 

class TeamSettings_acceptForm(forms.ModelForm): 
    class Meta: 
     model = TeamMembership 
     fields = ('user',) 

ビュー

@login_required 
def teamsettings_accept_applications(request, team_pk): 
    if request.method == 'POST': 
     logged_in_user = get_object_or_404(User, pk=request.user.pk) 
     requested_team = get_object_or_404(Team, pk=team_pk) 
     for member in requested_team.teammembership_set.all().order_by('-leader'): 
      if member.user.pk == request.user.pk and member.leader: 
       formaccept = TeamSettings_acceptForm(request.POST) 
       accepteduserid = formaccept.data['user'] 
       teamapplications = TeamApplication.objects.all().filter(from_user=accepteduserid).count() 
       if teamapplications > 1: 
        messages.success(request, "Error") 
        return redirect('teamsettings_applications', team_pk=team_pk) 
       else: 
        if formaccept.is_valid(): 
         teamapplications = TeamApplication.objects.all().filter(from_user=accepteduserid) 
         teamapplications.update(accepted=True) 
         formaccept.team = requested_team.pk 
         formaccept.save() 
         messages.success(request, "User has now been added to your team!") 
         return redirect('teamsettings_applications', team_pk=team_pk) 

そのデータを新しい行を作成し、他人を更新する必要があります。

私はジャンゴからの復帰に入るすべてはあなたがまだモデルのインスタンスにモデルフォームを処理していない

staff_teammembership.team_id may not be NULL 

答えて

0

です。だから、formacceptはチームがここにいるかどうかわかりません。なぜならチームをフィールドとして持たないTeamSettings_acceptFormのインスタンスだからです。この変更を修正するには、is_validコード:

if formaccept.is_valid(): 
    teamapplications = TeamApplication.objects.all().filter(from_user=accepteduserid) 
    teamapplications.update(accepted=True) 

    # New code here 
    new_team_membership = formaccept.save(commit=false) 
    new_team_membership.team = requested_team.pk 
    new_team_membership.save() 

    messages.success(request, "User has now been added to your team!") 
    return redirect('teamsettings_applications', team_pk=team_pk) 

Modelformsを使用すると便利です。

関連する問題