首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Django AutoField编辑modelForm?

如何使用Django AutoField编辑modelForm?
EN

Stack Overflow用户
提问于 2013-10-10 15:10:38
回答 2查看 1.9K关注 0票数 1

Django文档提到,模型AutoField不会用用ModelForm构建的表单来表示。

在编辑和保存表单时,我应该如何知道底层的AutoField id值才能正确地将表单数据保存到数据库中?

我知道我可以在编辑表单中注入一个隐藏字段来知道哪个行已经被编辑了,但是Django是否能够自动地管理这个隐藏字段或其他一些机制呢?

非常感谢

艾蒂安

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-10 15:16:52

在使用instance=<>时,可以通过指定ModelForm参数来做到这一点。在这里的文件中有更多关于这一点的信息。

创建/更新视图的示例用法:

代码语言:javascript
复制
def myview(request, id=None):
    if id:
        obj_to_edit = MyModel.objects.get(id=1)
        form = MyForm(instance=obj_to_edit)
    else:
        obj_to_edit = None
        form = MyForm()

    if request.method == 'POST':
        if id: #update
            form = MyForm(request.POST, instance=obj_to_edit)
        else: #create
            form = MyForm(request.POST)

    #rest of the code

而URL会有如下内容:

代码语言:javascript
复制
url(r'/blah/create/', 'myview'),
url(r'/blah/edit/(?P<id>[\d+])/', 'myview')

现在,django明白了它需要编辑而不是创建新的对象。

还请注意,如果您使用的是forms.Form,则必须手动查询唯一字段,或者如前面提到的那样注入隐藏的id字段。

票数 4
EN

Stack Overflow用户

发布于 2013-10-10 15:35:45

通常,在编辑表单时,要编辑的特定实例将在URL中使用主键或弹格字段标识,例如:

代码语言:javascript
复制
www.example.com/model/edit/6/

代码语言:javascript
复制
www.example.com/model/edit/object_slug/

然后,您将设置您的urls.py以将该参数传递给您的视图,在该视图中您将使用karthkir提供的示例(从这里开始,我将使用主示例)

urls.py

代码语言:javascript
复制
urlpatterns = patterns('',
    url(regex=r'^model/edit/(?P<pk>\d+)/$', 'myapp.views.myview', name='add_customer'),
)

views.py

代码语言:javascript
复制
def myview(request, pk):
    obj_to_edit = MyModel.objects.get(id=pk)
    ...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19299606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档