2016-12-22 4 views
0

私はモデルインスタンスをコピーするビューを持っています。 new_event.pk = Noneを設定し、ユーザーがキャンセル、変更、保存するためのフォームをレンダリングします。保存しないでmany2manyフィールドのモデルインスタンスをコピーする

しかし、M2Mフィールドはフォーム内では空白です。元のモデルインスタンスと同じ値を事前入力しておくことをお勧めします。

views.py

def event_copy(request, id=None): 
    new_event = get_object_or_404(Event, id=id) 
    new_event.pk = None # autogen a new primary key 

    form = EventForm(request.POST or None, instance=new_event) 

    if form.is_valid(): 
     event = form.save() 
     messages.success(request, "New event created") 
     return HttpResponseRedirect(event.get_absolute_url()) 

    context = { 
     "form": form, 
    } 
    return render(request, "events/event_form.html", context) 

コピーされているイベント・モデルは、2つのM2Mのフィールドがあり、これらは両方の形式で空白である:

models.py

class Event(models.Model): 

    title = models.CharField(max_length=120) 
    ... 
    blocks = models.ManyToManyField(Block) 
    facilitators = models.ManyToManyField(User) 

どのようにこれらのManyToManyFieldsを事前入力しますか?

答えて

0

私は問題thanks to this questionを解決しました。

pk = Noneを設定する前に、私は元からM2Mフィールドを取得するために必要な:

blocks = new_event.blocks.all() # M2M 
facilitators = new_event.facilitators.all() #M2M 

はその後initialパラメータに辞書にこれらを渡す:

form = EventForm(request.POST or None, 
       instance=new_event, 
       initial={'blocks': blocks, 'facilitators': facilitators,}) 
関連する問題