2016-12-22 2 views
0

У меня есть представление, которое копирует экземпляр модели. Он устанавливает new_event.pk = None, а затем отображает форму для пользователя, чтобы отменить, изменить материал и сохранить.Копирование экземпляра модели с большим количеством полей без сохранения

Однако поля 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) 

модель событий, которая копируется имеет два поля M2M, и они оба заготовки в виде:

models.py

class Event(models.Model): 

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

Как перенести эти многопользовательские поля?

ответ

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,}) 
Смежные вопросы