更改CreateView Django的类



我有CreateView,我想为字段添加类views.py:

class CreatePost(CreateView):
model = apps.blog.models.Post
fields = ['name', 'content', 'photo']
template_name = 'cabinet/post/create.html'

and in template:

{% 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
classPostForm(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

最新更新