【问题标题】:Django: How to use ModelForm and Generic ViewsDjango:如何使用 ModelForm 和通用视图
【发布时间】:2016-10-29 00:59:06
【问题描述】:

我正在学习Django

我对 Model FormGeneric Views 的用法有点困惑。

虽然两者不同,但我的理解是两者都可以根据给定的model class生成form

我有不同的表来存储想法、喜欢、cmets 和标签。

我是否应该使用model formgeneric views 来获取用户和喜欢和cmets 的想法。

我还想自定义表单的布局,那么对我来说更好的方法是什么?

我想了解如何使用django的这个功能

【问题讨论】:

    标签: python django model views


    【解决方案1】:

    通用视图和模型表单不是排他性的概念;通用视图包含特定功能的业务逻辑,而 ModelForms 从模型逻辑创建表单、验证/数据清理逻辑和 CRUD 功能。

    使用下面的示例(来自docs),UpdateView(作为 Django 的一部分提供的通用视图)从单个模型实例创建模型表单。通过 CBV 约定,要更新的实例的主键应该是 url 提供的第一个位置参数。

    在这种情况下,会自动生成一个 ModelForm。当需要更细粒度的控制时,您可以定义自己的 ModelForm 并将其提供给 CBV。希望这有助于消除您的困惑。

    示例 myapp/views.py:

    from django.views.generic.edit import UpdateView
    from myapp.models import Author
    from django import forms
    
    
    class MyModelForm(forms.ModelForm):
        model = Author
        fields = ['name', 'city', ...]
    
    
    class AuthorUpdate(UpdateView):
        model = Author
        form = MyModelForm
        template_name_suffix = '_update_form'
    

    示例 myapp/author_update_form.html:

    <form action="" method="post">{% csrf_token %}
        {{ form.as_p }}
        <input type="submit" value="Update" />
    </form>
    

    示例 myapp/urls.py

    from django.conf.urls import *
    from myapp.views import AuthorUpdate
    
    urlpatterns = patterns('',
        url('^update_author/(?P<pk>[\w-]+)$', AuthorUpdate.as_view(), name='update_author'),
    )
    

    【讨论】:

    • 谢谢。所以我们可以将模型表单传递给通用视图。
    • 如何自定义模板中的字段布局?就像自定义样式一样。
    • 查看将自定义 ModelForms 传递给 CBV 的更新。通过 Django 模板语言自定义字段。这是一个很大的话题,不过那里有很多很好的教程!遍历表单的字段 {% for field in form %}
      {{ field }}
      {% endfor %} 或按名称 {{ form.author }} 调用表单中的单个字段。
    • 谢谢。赞赏。
    猜你喜欢
    • 2013-03-07
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2014-04-25
    • 2014-10-05
    • 1970-01-01
    相关资源
    最近更新 更多