Python 为泛型表单的字段指定css类
我有CRUD视图,其中一个看起来像这样: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
#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