Django创建新记录而不是更新

时间:2015-04-08 03:45:20

标签: django django-models django-forms

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

模特:

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所需的外键时遇到问题。

1 个答案:

答案 0 :(得分: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字段?

相关问题