当前位置:  开发笔记 > 编程语言 > 正文

使用ModelForms时如何更新现有行?

如何解决《使用ModelForms时如何更新现有行?》经验,为你挑选了2个好方法。

我有一个问题,当其中一个字段是我的主键时,如何更新我的数据库中的现有行.我正在使用ModelForm和Django-Piston - 我的主要目标是将RESTful Post发送到我的webservice.我能够正确发送初始帖子(即主键值尚不存在).问题是当我想更新主键已经存在的值时 - 当我发出f.is_valid()时,它失败,因为"此UniqueIdentifier已经存在".如何使用ModelForms更新现有行进行表单验证?

我的models.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)

forms.py

from django import forms
from models import DeviceModel
class DeviceModelForm(forms.ModelForm):
    class Meta:
        model = DeviceModel

handlers.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

urls.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'}),
)

Alex Martell.. 16

的Django文档给出如何创建一个简单的例子"形式来更改现有[[实体]]":

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

如果您似乎想要使用相同的流来插入新对象和更改现有对象,则必须单独实例化表单,具体取决于查找主键是成功(现有对象)还是失败(新对象)! - )



1> Alex Martell..:

的Django文档给出如何创建一个简单的例子"形式来更改现有[[实体]]":

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

如果您似乎想要使用相同的流来插入新对象和更改现有对象,则必须单独实例化表单,具体取决于查找主键是成功(现有对象)还是失败(新对象)! - )



2> Benjamin Woh..:

要更新现有行(或ORM-speak中的对象),您必须告诉ModelForm实例化它时要使用的实例:

f = DeviceModelForm(request.POST, instance=myobject)

我不知道你myobject从哪里使用活塞,但你的问题似乎暗示你已经解决了这个特定的问题.

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有