Django 基于类的视图是不是自动为模板分配表单值
Posted
技术标签:
【中文标题】Django 基于类的视图是不是自动为模板分配表单值【英文标题】: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 请求,因为他仍将创建将要发布但尚未发布的数据条目。
【问题讨论】:
【参考方案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字段。以上是关于Django 基于类的视图是不是自动为模板分配表单值的主要内容,如果未能解决你的问题,请参考以下文章