2017-05-10 9 views
1

私は現在かなり単純なdjangoプロジェクトに取り組んでおり、いくつかのヘルプを使用することができます。現在、チェックボックスを使ってフォームを保存しています。djangoのManyToManyFieldにチェックボックス付きの値を保存するにはどうすればいいですか?

私は多対多とし、関係を通じて、次のモデルがあります:

class ProfileMatch(models.Model): 
    user = models.OneToOneField(settings.AUTH_USER_MODEL,unique=True) 
    profiles = models.ManyToManyField(UserProfile,blank=True) 

def __unicode__(self): 
    return "Profile id: %s" %(self.user.id) 

私は、チェックボックス.Selected profiles_idで、このためのHTMLフォームを作成することは仲間で保存する必要があり

<form action="." method="POST" class="post-form">{% csrf_token %} 
           <thead> 
            <th>Select</th> 
            <th>Profile-ID</th> 
           </thead> 

           <tbody> 
            {% for user in userprofiles %} 
            <tr> 
             <label class="checkbox"> 
               <input type="checkbox" name="user" data-toggle="checkbox" value="{{ user.pk }}"> 
             </label> 
             <td>{{ user.profile_id }}</td> 
            </tr> 
           {% endfor %}  

           </tbody> 
          </table> 
          <button type="submit" class="save btn btn-default">Add Selected </button> 
          </form> 

とシンプルをUSER_IDフォームを保存するビュー:

def PremuiumUserProfileSelectList(request, pk): 
    match = ProfileMatch.objects.get(pk=pk) 


    if request.method == 'POST': 
     if request.POST.getlist("user", None): 
      checked = request.POST.getlist("user", None) 
      premium_user = User.objects.get(pk=pk) 
      m = match(user=premium_user, profiles=checked) 
      m.save() 

     else: 
      return render(request, "premiumuser/selected_list.html", context) 
    else: 
     return render(request, "premiumuser/selected_list.html", context) 

これは保存されませんform.Formフィールドがレンダリングされ、選択されたすべてのprofiles_idがリストに表示されます。このフォームはどのように保存されますか?選択したすべてのチェックボックスの値を関連付けられたユーザーに保存します。保存するにはどうすればいいですか?

答えて

1

checkedがidsのリストであるとします。

match.profiles.add(*checked) 
+0

ProfileMatchの一致するクエリが存在しない場合は、どのようにして一致オブジェクトを作成しますか? –

+1

'ProfileMatch.objects.create(user = user)'。manytomanyフィールドを追加すると、関連するオブジェクトを追加する前にオブジェクトを最初に作成する必要があるためです。 – itzMEonTV

関連する問題