python - 使用 ModelForms 时如何更新已存在的行?

标签 python django modelform django-piston

当其中一个字段是我的主键时,我有一个关于如何更新数据库中现有行的问题。我正在使用 ModelForm 和 Django-Piston - 我的主要目标是将 RESTful Post 发送到我的网络服务。我能够正确发送初始帖子(即主键值尚不存在)。问题是当我想更新主键已经存在的值时 - 当我发出 f.is_valid() 它失败,因为“这个 UniqueIdentifier 已经存在”。如何使用 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举一个简单的例子说明如何创建“一个改变现有 [[entity]] 的表单”:

>>> article = Article.objects.get(pk=1)
>>> form = ArticleForm(instance=article)

如果看起来你想使用相同的流程来插入新对象和更改现有对象,则必须根据查找主键是成功(现有对象)还是失败(新对象)来分别实例化表单对象)!-)

关于python - 使用 ModelForms 时如何更新已存在的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1780499/

相关文章:

python - 将 UDF 应用于 StructType 数组

python - 使用 xlrd 引擎在 xls 文件上调用 pands read_excel 时出现 AssertionError

django - 在 Django 中使用模板变量和 django-compressor

Python 正在向后打印一个列表,但不打印其他列表

django - 对 ModelForm() 子项的 save() 中的 self.instance 感到困惑

python - 当设置instance=object时,Django模型表单不会填充

django - 在django中扩展User模型后,如何创建ModelForm?

python - 忽略 nans 沿轴取 np.percentile 的最佳方法是什么?

python - 从列表python的单个列表中删除子列表

python - ModelForm 和 error_css_class