情况:有一个包含一些数据的现有 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-function发送新数据时,form.save()按原样插入一条新记录。但是,当我编辑一个已经存在的记录时,它也会作为新记录插入......而不是像它应该做的那样更新。
尝试将 id 从AutoField更改为IntegerField会改变行为:修改记录会使form.save()修改现有记录,而尝试插入新记录则失败,因为它没有 id。
问题: 我是否必须手动从数据库中获取一个新的 ID 值并强制 Django 将它用于这条新记录,或者有没有办法让 Django 自动确定它是否应该使用 INSERT 或 UPDATE?