当其中一个字段是我的主键时,我有一个关于如何更新数据库中现有行的问题。我正在使用ModelForm和Django活塞-我在这里的主要目标是让RESTful Post发送到我的webservice。我能够正确地发送初始帖子(即主键值还不存在)。问题是当我想更新一个主键已经存在的值时-当我发出一个f.is_valid()时失败,因为“这个唯一标识符已经存在”。如何使用ModelForms更新现有行进行表单验证?
我的模特.py:
from django.db import models
class DeviceModel(models.Model):
uniqueIdentifier = models.CharField(primary_key=True, max_length=100)
deviceToken = models.CharField(max_length=100)
表单.py
from django import forms
from models import DeviceModel
class DeviceModelForm(forms.ModelForm):
class Meta:
model = DeviceModel
处理程序.py
class DeviceHandler(BaseHandler):
allowed_methods = ('POST', 'GET', 'DELETE',)
def create(self, request):
f = DeviceModelForm(request.POST)
if f.is_valid():
new_object = f.save()
return new_object
return rc.BAD_REQUEST
网址.py
from django.conf.urls.defaults import *
from piston.resource import Resource
from api.handlers import DeviceHandler
device_handler = Resource(DeviceHandler)
urlpatterns = patterns('',
(r'^api/$', device_handler, {'emitter_format': 'json'}),
)
django docs给出了一个简单的例子,说明如何创建“一个表单来更改现有的[[实体]]”:
如果您希望在插入新对象和更改现有对象时使用相同的流,则必须根据查找主键是成功(现有对象)还是失败(新对象)分别实例化窗体!-)
下面是一个更完整的解决方案,它不使用任何基于类的视图,将此页面上的其他答案和评论汇集在一起。
我让它作为对jquery ajax的回复。
要更新现有行(或ORM speak中的对象),必须告诉
ModelForm
实例化时要使用的实例:不过,我不确定使用活塞从何而来,但你的问题似乎意味着你已经解决了那个特定的问题。
相关问题 更多 >
编程相关推荐