【发布时间】:2011-12-10 19:33:32
【问题描述】:
情况:有一个现有的 mysql 数据库,其中包含一些数据。对于这个例子,我只使用了两个字段; id 和 主题。 id 被定义为带有 *auto_increment* 选项的整数,而 subject 只是一个普通的 varchar。代码:
型号:
class AList(models.Model):
id=models.AutoField(primary_key=True, db_column='ID')
subject=models.CharField(max_length=200, db_column='SUBJECT')
class Meta:
db_table = u'alist'
表格:
class AForm(ModelForm):
class Meta:
model=AList
查看:
def alistForm(request,a_id=None):
if a_id:
a=AList.objects.get(id=a_id)
form=AForm(instance=a)
else:
form=AForm(request.POST or None)
return render_to_response('aform.html',{'form':form},context_instance=RequestContext(request)
def alistPost(request):
form=AForm(request.POST or None)
if form.is_valid():
form.save()
问题描述: 当表单向 alistPost 函数发送新数据时,form.save() 会插入一条新记录。但是,当我编辑一个已经存在的记录时,它也会作为新记录插入......并且没有按应有的方式更新。
尝试将 id 从 AutoField 更改为 IntegerField 会改变行为:修改记录会使 form.save() 修改现有的,在尝试插入新记录时失败,因为它没有 id。
问题: 我是否必须手动从数据库中获取一个新的 ID 值并强制 Django 将其用于这条新记录,或者有没有办法让 Django 自动确定它是否应该使用 INSERT 或 UPDATE?
【问题讨论】:
标签: django django-models django-forms django-database