我正在考虑使用DRY方式为我的<input>HTML元素的占位符属性使用字段标签.我正在使用django-crispy-forms.
现在我有:
class FilterForm(Form):
query = CharField(max_length=50, label='', required=False)
def __init__(self, data=None, files=None, **kwargs):
self.helper = FormHelper()
self.helper.layout = Layout(
Field('query', placeholder='Search ...'),
)
super(FilterForm, self).__init__(data, files, **kwargs)
Run Code Online (Sandbox Code Playgroud)
但是,我不希望单独设置标签和占位符,因为这最终会有更多的字段,而且非常冗长.
你有什么建议?
我想为两种形式使用相同的模型并更改字段的标签如何更改标签?
这是我的一个表格:
class jobpostForm(forms.ModelForm):
class Meta:
model = jobpost
fields = ('job_type','title','company_name','location','country','description','start_date','end_date','how_to_apply')
widgets = {
'job_type':RadioSelect(),
'location':TextInput(attrs={'size':'70','cols': 10, 'rows': 20}),
'description': TinyMCE(attrs={'cols':'100', 'row': '80'}),
'start_date':AdminDateWidget(attrs={'readonly':'readonly'}),
'end_date':AdminDateWidget(attrs={'readonly':'readonly'}),
'how_to_apply':RadioSelect(),
}
def __init__(self, *args, **kwargs):
super(jobpostForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_class = 'horizontal-form'
self.helper.form_id = 'id-jobpostform'
self.helper.form_class = 'blueForms'
self.helper.form_method = 'post'
self.helper.form_action = '/portal/next/post/'
self.helper.add_input(Submit(_('submit_addcontent'), 'Preview'))
super(jobpostForm, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
我希望将"位置"更改为"工作地点"..我该怎么做?
对于Django上的酥脆形式,我一直在努力 VariableDoesNotExist at / Failed lookup for key [form] in u'[{\'False\': False, \'None\': None,.....
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block loginForm %}
<div class="container" style="padding-bottom: 70px;">
<div class='row'>
<div class='col-md-6 col-md-offset-3'>
<div class="well">
<legend>Sign in</legend>
<form method="post" action="{% url 'django.contrib.auth.views.login' %}" class="form-horizontal">
{% crispy form %}
<input type="hidden" name="next" value="{{ next }}"/>
</form>
</div>
</div>
</div>
</div>
{% endblock loginForm %}
Run Code Online (Sandbox Code Playgroud)
forms.py:
from django import forms
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Div, Submit, …Run Code Online (Sandbox Code Playgroud) 根据django-crispy-form文档,我将能够用类更改输入宽度input-small.但我的表单看起来宽度为100%:

另外,如果我将css_class添加到Field,则大小保持为宽度:100%(.form-control)
我已按照文档说明设置表单:
class LoginForm(forms.Form):
usuari = forms.CharField( help_text = u'Codi Usuari')
paraula_de_pas = forms.CharField( help_text = u'Paraula de pas')
# Uni-form
helper = FormHelper()
helper.form_class = 'form-horizontal'
helper.label_class = 'col-lg-2'
helper.field_class = 'col-lg-8'
helper.layout = Layout(
PrependedText('usuari',
'<span class="glyphicon glyphicon-user"></span> ',
css_class='input-small'),
PrependedText('paraula_de_pas',
'<span class="glyphicon glyphicon-asterisk"></span> ',
css_class='input-small'),
FormActions(
Submit('save_changes', 'Entrar-hi', css_class="btn-primary"),
)
)
Run Code Online (Sandbox Code Playgroud)
在设置中:
CRISPY_TEMPLATE_PACK="bootstrap3"
Run Code Online (Sandbox Code Playgroud)
我是最新版本.怎么了?
我实现了一个自定义的clean方法来验证我的formset.我知道有错误,因为我可以将它们打印到控制台,但这些non_form_errors()永远不会在我的模板中呈现.我该如何渲染它们?
template.html:
<form action="{% url 'databank:register' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<div class="container">
<div class="row" style="margin-top: 30px">
<div class="col-md-10 col-md-offset-1">
{{ dataset_form.media }}
{% crispy dataset_form %}
<div class="authorFormset">
{% for form in formset %}
{% crispy form helper %}
{% endfor %}
</div>
{% crispy terms_form %}
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-md-10 col-md-offset-1">
<input type="submit" class="btn btn-lg btn-success" value="Submit">
</div>
</div>
</div>
{{ formset.management_form }}
Run Code Online (Sandbox Code Playgroud)
forms.py:
class BaseAuthorFormset(BaseFormSet):
def clean(self):
if any(self.errors):
return
roles …Run Code Online (Sandbox Code Playgroud) 我正在尝试将我的字段标签放在表单的左侧,右侧有文本输入.但是,我似乎无法使其发挥作用.这是我放置的设置.
forms.py
helper = FormHelper()
helper.form_class = 'form-horizontal'
helper.layout = Layout(
Field('test_field'),
FormActions(
Submit('submit', 'Record', css_class='btn btn-primary'),
Reset('reset', 'Clear', css_class='btn btn-default'),
)
)
Run Code Online (Sandbox Code Playgroud)
form.html
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block page_panel %}
{% crispy form %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
生成的html就像这个 结果
我是 Django 的新手,我正在尝试用脆脆的形式来设计表单。我的应用程序中有一个表单,它恰好是一个模型表单,我已经按照这里所说的/sf/answers/924111191/使 ModelForm 与脆皮表单一起工作,但收到此错误:
'FormHelper' object has no attribute 'append'
这是我的代码的外观forms.py:
from django import forms
from models import Ticket, Ticketuser
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit, Layout, Fieldset, ButtonHolder
from crispy_forms.bootstrap import FormActions
class AddTicketForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(AddTicketForm, self).__init__(*args, **kwargs)
self.helper = FormHelper(self)
self.helper.append(Submit('save', 'save'))
class Meta:
model = Ticket
fields = ('id', 'comment')
def process(self):
data = self.cleaned_data
data = data['comment']
return data
Run Code Online (Sandbox Code Playgroud)
如何克服这个问题并像我想要的那样设计表单?
我有两个模型,Runs 和 Orders。一次运行将完成许多订单,因此我的订单和运行之间存在多对一关系,表示为订单上的外键。
我想构建一个 UI 来创建运行。它应该是一种有人选择要运行的订单的形式。我想在每个订单的信息旁边显示一个复选框列表。我现在正在使用django 脆皮形式。
视图.py
class createRunView(LoginRequiredMixin, CreateView):
model = Run
form_class = CreateRunForm
template_name = 'runs/create_run.html'
Run Code Online (Sandbox Code Playgroud)
表格.py
class CreateRunForm(forms.ModelForm):
class Meta:
model = Run
fields = ['orders',]
orders = forms.ModelMultipleChoiceField(queryset=Order.objects.filter(is_active=True, is_loaded=False))
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_method = 'post'
self.helper.layout = Layout(
Field('orders', template="runs/list_orders.html"),
Submit('save', 'Create Run'),
Button('cancel', 'Cancel'),
)
Run Code Online (Sandbox Code Playgroud)
我不确定list_orders.html模板中有哪些当地人可供我使用。似乎有{{ field }},也许form.visible_fields但是如果我深入研究其中一个TypeError: 'SubWidget' object is not iterable,我会得到一个,它几乎没有在线记录。
以上表明我可能仍然在模板中获得一个小部件,尽管事实上Field('orders', …
尝试使用crispy过滤器时,我收到一个错误:
django.template.exceptions.TemplateSyntaxError:过滤器无效:'脆'
我相信这是因为由于Django某种原因无法找到松脆的过滤器,因为当我输入一个不存在的过滤器的名称时,我收到了同样的错误。
我已经{% load crispy_forms_tags %}在 html 文档的顶部使用{{ form|crispy }}并用于应用过滤器。我还在文件中添加了“crispy forms”应用程序settings.py,并使用 安装了django-crispy-forms包pip,我可以清楚地看到使用pip freeze.
请注意,脆皮表单过滤器确实适用于我网站的不同 django 应用程序,即使我认为我没有更改该应用程序目录中的任何内容(但我可能错了,自从我在该目录中工作以来已经有一段时间了)。我想不出有什么不同。我读了一些关于附加到第一个应用程序目录的过滤器,它可以,仅此而已,但该信息含糊不清,当我{% load crispy_forms_tags %}从使用它的模板中删除该行时,脆过滤器仍然无法在新应用程序中工作。
这是模板。
{% extends "breed_identifier/base.html" %}
(% load crispy_forms_tags %)
{% block content %}
<div class="content-section">
<form method="POST">
{% csrf_token %}
<fieldset class="form-group">
<legend class="border-bottom mb-4">Join Today</legend>
{{ form|crispy }}
</fieldset>
<div class="form-group">
<button class="btn btn-outline-info" type="submit">Sign Up</button>
</div>
</form>
<div class="border-top pt-3"> …Run Code Online (Sandbox Code Playgroud)