2015-04-08 4 views
0

Im создает шаблон, в котором форма заполняется данными из БД, и пользователь может обновлять изменения. Проблема в том, что мой код создает новую запись вместо обновления существующей.Django создает новую запись вместо обновления

Модели:

class Users(models.Model): 
    first_name = models.CharField(max_length=50) 
    last_name = models.CharField(max_length=50) 
    email = models.CharField(max_length=100) 

class Event(models.Model): 
    event_admin = models.ForeignKey(Users) 
    event_name = models.CharField(max_length=50) 
    event_location = models.CharField(max_length=50) 
    event_date = models.DateField() 
    event_time = models.TimeField() 
    event_notes = models.CharField(max_length=200) 

Вид:

def edit_event(request, id):  
if request.method == 'POST': 
    e1 = CreateEventForm(request.POST) 
    if e1.is_valid(): 
     e1 = e1.save(commit=False) 
     temp = get_object_or_404(Event, id = id) 
     admin = temp.event_admin 
     e1.event_admin = admin 
     e1.save() 

     eventID = e1.id 
     return HttpResponseRedirect('/app/' + str(eventID))   
else:    
    event = CreateEventForm(instance=get_object_or_404(Event, id=id)) 
    return render(request, 'edit_event.html', {'event':event}) 

Я считаю, что моя проблема заключается в том, что им не обновляет текущий объект, но строительство нового. Однако при работе с существующей записью у меня возникают проблемы с назначением внешнего ключа, который необходим в event_admin.

ответ

3

Вы должны пройти instance аргумент в виде конструктора:

event = get_object_or_404(Event, id=id) 
form = CreateEventForm(request.POST, instance=event) 
if form.is_valid(): 
    form.save() 
    return HttpResponseRedirect('/app/' + str(event.id)) 

А почему вы переназначить event_admin поле в экземпляре Event?

Смежные вопросы