Django 创建新记录而不是更新

Django creating new record instead of updating

我正在构建一个模板,其中的表单使用数据库中的数据填充,用户可以更新更改。问题是,我的代码正在创建新记录而不是更新现有记录。

型号:

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.

中所需的外键时遇到问题

您应该将 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 实例中重新分配 event_admin 字段?