【问题标题】:Does Django Class Based Views automatically assign form value for templatesDjango 基于类的视图是否自动为模板分配表单值
【发布时间】:2020-04-15 06:44:37
【问题描述】:

我使用 Django 2

这是我的 view.py 包含的内容

class SchoolCreateView(CreateView):
     fields = ("name","principal","location")
     model = models.School

此视图使用的模板(html文件)包含代码:

form.instance.pk

而且它有效。它返回正确的主键。我不明白为什么。 当我没有在我的视图中定义表单对象时,为什么这会起作用? Django中使用CBV时form的值是否自动赋值?

跟进问题。我知道 form.instance 代表模型中的一行,但是 form 本身代表什么?我目前对表单的理解是它代表 view.py 中的 request.POST(基于我从函数视图中获得的知识)。但这没有任何意义,因为客户端尚未发出 POST 请求,因为他仍将创建将要发布但尚未发布的数据条目。

【问题讨论】:

    标签: django django-templates django-views django-class-based-views


    【解决方案1】:

    Pk 是主键字段,默认为id。如果将其他字段定义为主键,调用 pk 将返回 this。

    来自文档:

    默认情况下,Django 为每个模型提供以下字段:

    id = models.AutoField(primary_key=True)
    

    这是一个自动递增的主键。

    如果您想指定自定义主键,请在其中一个字段上指定 primary_key=True。如果 Django 看到你明确设置了 Field.primary_key,它不会添加自动 id 列。

    每个模型只需要一个字段来具有primary_key=True(显式声明或自动添加)。

    【讨论】:

    • 我了解 pk 在处理模型实例中的列时的工作原理。我不明白的是 CBV 如何自动为模板声明表单。在我的模板中,我有 form.instance.pk。当我没有在 SchoolCreateView 中明确声明时,模板如何知道与表单关联的值(来自 form.instance.pk)?
    • 当你从CreateView继承并声明模型时,即model = models.School{{ form }}成为你模型的一个类型并且拥有模型的id字段。
    猜你喜欢
    • 2015-08-10
    • 2016-02-07
    • 2018-11-24
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    • 2017-05-08
    相关资源
    最近更新 更多