2017-06-26 8 views
1

私のDjangoアプリケーションでCreateViewに問題があります.Sesionを作成したいのですが、セッションはそのグループのGroupMemberリーダーによってのみ作成できます。Django:中間モデルを指定するManyToManyFieldに値を設定できません

ここ

は私のモデルです:

class Group(models.Model): 
    # The code 

class GroupMember(models.Model): 
    member = models.ForeignKey(Volunteer) 
    group = models.ForeignKey(Group) 
    leader = models.BooleanField(default=False) 

class Session(models.Model): 
    name = models.CharField(max_length=250) 
    group = models.ForeignKey(Group) 
    assistants = models.ManyToManyField(GroupMember, through='SessionAssistant') 
    hours = models.FloatField(default=1) 
    day = models.DateTimeField(default=datetime.now) 

class SessionAssistant(models.Model): 
    assistant = models.ForeignKey(GroupMember) 
    session = models.ForeignKey(Session) 
    rol = models.CharField(max_length=250) 
    assist = models.BooleanField(default=True) 

また、私は私がSesisionを作成するときに、私はここに、私のアシスタントのデrolsを割り当てることができますしたいが私の見解は以下のとおりです。

class CreateSession(CreateView): 
model = Session 
template_name = "session_form.html" 
fields = ['name', 
      'hours', 
      'day', 
      'assistants', ] 

success_url = '/' 

def form_valid(self, form): 
    group = Group.objects.get(id=self.kwargs['pk']) 
    form.instance.group = group 
    return super(CreateSession, self).form_valid(form) 

答えて

0

Djangoはカスタム保存されません。 ManyToManyの関係。 official documentationをご覧ください。

あなたは

form.save() 

を使用して、フォームを保存し、SessionAssistant

for assistant in form.cleaned_data['assistants']: 
    SessionAssistant.objects.create(assistant=assistant, session=form.instance) 
から新しいオブジェクトを作成することができます
関連する問題