Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为泛型表单的字段指定css类_Python_Css_Django - Fatal编程技术网

Python 为泛型表单的字段指定css类

Python 为泛型表单的字段指定css类,python,css,django,Python,Css,Django,我有CRUD视图,其中一个看起来像这样: #model class Model(models.Model): field1 = models.CharField() field2 = models.CharField() #view class Model1CreateView(CreateView): model = Model1 fields = ['field1', 'field2'] #template and model1_form.html

我有CRUD视图,其中一个看起来像这样:

#model
class Model(models.Model):
    field1 = models.CharField()
    field2 = models.CharField()



#view
class Model1CreateView(CreateView):
    model = Model1
    fields = ['field1', 'field2']

#template
and model1_form.html

    <form action="{% url 'model1_new' %}" method="post">
      {% csrf_token %}
      {{ form.as_p }}
      <input type="submit" value="Submit" />
    </form>
#模型
类模型(models.Model):
field1=models.CharField()
field2=models.CharField()
#看法
类Model1CreateView(CreateView):
模型=模型1
字段=['field1','field2']
#模板
和model1_form.html
{%csrf_令牌%}
{{form.as_p}}

我需要为field1指定一个css类,如何才能做到这一点?

如果要这样做,必须显式定义表单

class Model1Form(forms.ModelForm):
    field1 = forms.CharField(widget=forms.TextInput(attrs={'class': 'myclass'}))
    class Meta:
        model = Model1
        fields = ['field1', 'field2']

class Model1CreateView(CreateView):
    form_class = Model1Form
    model = Model1

您需要创建一个
表单
并修改该字段小部件的
attrs
。有两种常见的方法可以做到这一点。无论哪种情况,您都需要创建一个自定义的
表单
,并告诉您的
视图
使用该表单:

forms.py

from django import forms
from myapp.models import FooModel

class FooForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(FooForm, self).__init__(*args, **kwargs)
        self.fields['field1'].widget.attrs = { 'class': 'fooclass' }

    class Meta:
        model = FooModel
        fields = ['field1', 'field2']

然后在您的视图中.py

from myapp.forms import FooForm

class Model1CreateView(CreateView):
    model = Model1
    fields = ['field1', 'field2']
    form_class = FooForm

这不是一个直接的答案,但很有用。字段也有ID,有时你可能想用一个ID来表示CSS。@Kos,对于这样一个简单的事情,我必须安装所有的ID吗?不,谢谢。我不是这个意思。该库很有用,因为Django通常鼓励在
小部件
实例中为给定的
表单
设置字段类,而(可以说)将其放在模板中更符合逻辑。我是否也应该在Model1Form中指定field2?如果您没有更改默认值(如模型中定义的)的任何内容,那么不,没有理由这样做。它还会引发一个错误:
Model1CreateView缺少一个queryset
。你知道为什么吗?抱歉,应该是form\u class,你仍然需要model。在
Model1CreateView
中,它必须是
form\u class=FooForm
form=FooForm
form\u class
。您可以在此处看到
CreatView
提供的所有属性和方法:。另外,我忘了在表单中添加第二个字段。我已经更新了
from myapp.forms import FooForm

class Model1CreateView(CreateView):
    model = Model1
    fields = ['field1', 'field2']
    form_class = FooForm