python - 更改 CreateView Django 的类
问题描述
我有 CreateView,我想为字段 view.py 添加类:
class CreatePost(CreateView):
model = apps.blog.models.Post
fields = ['name', 'content', 'photo']
template_name = 'cabinet/post/create.html'
在模板中:
{% extends 'cabinet/includes/main.html' %}
{% block title %}Створити новину{% endblock %}
{% block content %}
<form action="." method="POST">
{% csrf_token %}
{{ form.media }}
{{ form.as_ul }}
</form>
{% endblock %}
在输出中我有
<p><label for="id_name">Name:</label> <input type="text" name="name" maxlength="250" required="" id="id_name"></p>
但我想拥有<input type="text" name="name" maxlength="250" required="" class="form-control" id="id_name">
解决方案
您可以定义一个ModelForm
您指定class="…"
(某些)小部件的位置:
# app_name/forms.py
from apps.blog.models import Post
from django import forms
class PostForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['name'].widget.attrs['class'] = 'form-control'
class Meta:
model = Post
fields = ['name', 'content', 'photo']
然后我们可以在我们的CreatePostView
:
class CreatePostView(CreateView):
model = apps.blog.models.Post
form_class = PostForm
template_name = 'cabinet/post/create.html'
注意:在 Django 中,基于类的视图 (CBV) 通常有一个
…View
后缀,以避免与模型名称发生冲突。因此,您可能会考虑将视图类重命名为CreatePostView
,而不是。CreatePost
推荐阅读
- visual-studio - 在创建新的 Android 项目时,对象引用未设置为对象的实例
- firebase - 在哪里可以找到新的 Firebase Analytics BigQuery 导出方案示例数据?
- debian - 我收到“bash:气流:找不到命令”
- java - Java 插入排序中的错误
- python - Openpyxl xlsx 结果是附加而不是覆盖
- swift - UITextField rightView 图像和按钮?
- html - 没有填充的CSS边距不起作用
- html - 相邻元素实际上如何围绕浮动元素工作?CSS
- scala - 使用 in 子句批量更新
- ios - 当 ButtonB 被隐藏时,StackView 为 ButtonA 上浆