首页 > 解决方案 > 更改 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">

标签: pythondjangodjango-views

解决方案


您可以定义一个ModelForm您指定class="…&quot;(某些)小部件的位置:

# 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


推荐阅读