python - 如何使用 Django AutoField 编辑 modelForm?

标签 python django forms

Django 文档提到 Model AutoField 不会在使用 ModelForm 构建的表单中表示。

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

我知道我可以在编辑表单中给自己注入(inject)一个隐藏字段,以了解哪一行已被编辑,但是 Django 有没有办法自动管理该隐藏字段或其他一些机制?

非常感谢

艾蒂安

最佳答案

您可以通过指定 instance=<> 来做到这一点使用 ModelForm 时的参数. 更多信息请参见 documentation here

创建/更新 View 的示例用法:

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 应该是这样的:

url(r'/blah/create/', 'myview'),
url(r'/blah/edit/(?P<id>[\d+])/', 'myview')

现在,django 知道它需要编辑而不是创建新对象。

另请注意,如果您使用的是 forms.Form ,您将不得不手动查询唯一字段,或注入(inject)隐藏的 id你提到的领域。

关于python - 如何使用 Django AutoField 编辑 modelForm?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19299606/

相关文章:

html - 在 django 中渲染发布的表单时显示所选选项

html - 如何水平对齐表格?

python - 如何复制模块

python - psycopg : Python. h:没有这样的文件或目录

python - pip requirement.txt 基于环境变量的条件或环境标记

forms - Symfony2.8 在表单类型中获取语言环境

javascript - 单击按钮提交时如何禁用操作表单?

Python os 模块无法识别目录中的特定文件夹

python - 模型方法的详细名称

Django runserver - 无法提供视频文件