代码:
模型:
class Machines(models.Model):
name = models.CharField(max_length=100, verbose_name="hostname", help_text="Host name of the machine")
ip_addr = models.CharField(max_length=50, primary_key=True, help_text="IP address of the machine")
.... have many other fields.
表单:使用 forms.ModelForm 创建表单
看法:
def save(request):
if request.method == "POST":
ip = request.POST.get("ip")
machine = get_object_or_404(Machines, ip_addr=ip)
form = MachineForm(instance=machine, data=request.POST)
if form.is_valid():
if form.has_changed():
form.save()
context = {"message": "Updated successfully"}
else:
context = {"message": "No data to update"}
return render_to_response("edit.html", context, context_instance=RequestContext(request))
如果我更改“名称”字段,form.save() 会正确更新当前对象。但是,如果我更改作为主键的“ip_addr”字段,form.save() 会创建两个条目,一个带有旧主键,另一个带有新主键。
如果我们在 MySQL 中做同样的事情(顺便说一句,我使用 MySQL 作为数据库)
update machines_table set ip_addr="10.1.1.1" where ip_addr="10.1.1.2";
它工作正常,不会有任何重复的条目。
你能帮帮我吗?