我使用django-crispy-forms来呈现Bootstrap3内联形式(下面显示的代码),但是表单提交时的错误(如跳过必填字段)没有显示.它们以正常和水平形式布局.
有人可以建议可能的原因吗?
class Person(models.Model):
name = models.CharField(max_length=500)
city = models.CharField(max_length=50)
country = models.CharField(max_length=50)
email = models.EmailField(blank=True)
Run Code Online (Sandbox Code Playgroud)
class EntryForm(forms.ModelForm):
class Meta:
model = Person
def __init__(self, *args, **kwargs):
super(EntryForm, self).__init__(*args, **kwargs)
self.helper = FormHelper(self)
self.helper.form_class = 'form-inline'
self.helper.field_template = 'bootstrap3/layout/inline_field.html'
self.helper.layout.append(ButtonHolder(
Submit('save', 'Save', css_class='btn-primary btn-hg')
)
)
Run Code Online (Sandbox Code Playgroud)
我使用{% load crispy_forms_tags %},并{% crispy form %}在我的模板.
我在使用django-crispy-forms时遇到了一个问题,我无法得到答案.我有一个相当复杂的表单布局,到目前为止,一切都非常好用cripy-forms.
表单的一部分使用通用内联formset.这也是有效的,但我的问题是,我无法弄清楚如何访问delete-checkbox(当can_delete = True时)
相应的代码类似于:
class BaseReleaseReleationFormSet(BaseGenericInlineFormSet):
def __init__(self, *args, **kwargs):
self.instance = kwargs['instance']
super(BaseReleaseReleationFormSet, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_id = "id_relation_form"
self.helper.form_class = 'form-horizontal'
self.helper.form_method = 'post'
self.helper.form_action = ''
self.helper.form_tag = False
base_layout = Row(
Column(
Field('name', css_class='input-small'),
#Field('delete', css_class='input-small'),
css_class='span3'
),
Column(
Field('url', css_class='input-xlarge'),
css_class='span4'
),
css_class='row relation-row',
)
self.helper.add_layout(base_layout)
Run Code Online (Sandbox Code Playgroud)
name和url字段根据需要使用crispy-forms呈现,但delete-checkbox显示在表单的末尾.我无法在布局中访问它.
有人知道如何解决这个问题吗?有小费吗?提前致谢!
我正在尝试使用 Django 脆皮形式创建一个 Django 应用程序。
设置.py
CRISPY_TEMPLATE_PACK = 'bootstrap3'
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'face', #app name
'crispy_forms',
)
Run Code Online (Sandbox Code Playgroud)
索引.html
{% extends "base.html" %}
{% load crispy_forms_tag %}
{% block title %}
AuthorizedUser
{% endblock title %}
{% block content %}
<h1>Quote of the Day</h1>
<blockquote>{{quote}}</blockquote>
<p>Or, hit reload if you want a new one...</p>
<form method="POST" action="{% url %}" >
{% csrf_token %}
{{ form|crispy}}
<input type="hidden" name="quote" value="{{quote}}" />
<input type="hidden" name="access_token" value="{{access_token}}" /> …Run Code Online (Sandbox Code Playgroud) 我的具体情况是我需要在一行中渲染这个字段(使用Bootstrap 3):

所以类似于:
<div class="form-group">
<label>Amount:</label>
<div class="row">
<input name="amount_0" type="number" class="col-xs-8">
<select name="amount_1" class="col-xs-4">...</select>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
使用:https://github.com/jakewins/django-money
小工具:https://github.com/jakewins/django-money/blob/master/djmoney/forms/widgets.py
模型:
from djmoney.models.fields import MoneyField
class MyModel(models.Model):
...
amount = MoneyField(...)
...
Run Code Online (Sandbox Code Playgroud)
形成:
class MyForm(forms.ModelForm):
...
@property
def helper(self):
helper = FormHelper()
helper.form_tag = False
helper.layout = Layout()
helper.layout.fields = [
...
'amount',
...
]
return helper
...
Run Code Online (Sandbox Code Playgroud) class StudentCreateView(CreateView):
model = Student
template_name = "students/students_edit.html"
form_class = StudentCreateForm
def get_success_url(self):
return u'%s?status_message=??????? ??????? ?????????' % reverse('home')
def post(self, request, *arg, **kwargs):
if request.POST.get('cancel_button'):
messages.info(self.request, u"????????? ?????????")
return HttpResponseRedirect(
u'%s?status_message=????????? ?????????'
% reverse('home'))
else:
messages.success(self.request, u"??????? ??????? ?????????")
return super(StudentCreateView, self).post(
request,*arg, **kwargs)
def get_context_data(self, **kwargs):
context = super(StudentCreateView, self).get_context_data(**kwargs)
context['meta'] = u'????????? ????????'
context['headtext'] = context['meta']
return context
Run Code Online (Sandbox Code Playgroud)
在此视图中,如果单击取消按钮,我会检查发布功能
self.helper.layout[-1] = FormActions(
Submit('add_button',u'????????', css_class='btn btn-primary'),
Submit('cancel_button', u'?????????'),
)
Run Code Online (Sandbox Code Playgroud)
只有在 createview 提交取消不能正常工作。单击它会尝试检查表单,当我想取消时,它会回答我以解决表单上的所有问题。我已将提交更改为按钮,按钮取消根本不起作用。我在 stackoverflow 上发现了一个变体,将 onclick 方法添加到按钮,但它不适合我(当我在重定向窗口信息消息上取消或发布表单时,它告诉我发布或取消的状态。所以当我尝试 onclick 方法时,它推送了过去的页面,所以没有显示信息消息。如何修复 …
forms django model-view-controller views django-crispy-forms
我使用 allauth 用电子邮件登录,并做了一个非常基本的自定义登录表单和 allauth 的模板覆盖并显示登录表单。点击 URL 会让我直接进入异常:
在 [{'True': True, 'False': False, 'None': None}, {'True': True, 'False': False, 'None': None, 'form 中查找键 [html5_required] 失败':,'form_show_errors':真,'form_show_labels':真,'label_class':'','field_class':''},{'forloop':{'parentloop':{},'counter0':1,' counter': 2, 'revcounter': 2, 'revcounter0': 1, 'first': False, 'last': False}, 'field': }, {}]
然后我必须继续调试器两次才能在表单上结束。
我试图寻找这个特定的[html5_required]标签/密钥,但没有找到任何人丢失相同的密钥。
我删除了自定义登录表单settings.py以查看是否存在问题,但这没有帮助。
我什至用一个简单的 ```ModelForm`` 测试它,只显示两个字段并遇到了同样的问题。
我已经尝试了两种:基于类的视图(用于登录)和基于函数的视图(用于配置文件),我在两者上都遇到了同样的问题。
设置.py:
INSTALLED_APPS = [
...
'crispy_forms',
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.google',
...
]
CRISPY_TEMPLATE_PACK = 'bootstrap4'
ACCOUNT_FORMS = {
"login": "users.forms.CustomLoginForm"
}
Run Code Online (Sandbox Code Playgroud)
表格.py
from django.utils.translation import ugettext as _
from django.urls import reverse_lazy …Run Code Online (Sandbox Code Playgroud) 使用Django Crispy Forms我想在我的提交按钮周围添加一个类,如下所示:
<div class="col-lg-offset-3 col-lg-9">
<input type="submit" value="Log Me In" class="btn btn-default" />
</div>
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所管理的:
<input type="submit" value="Log Me In" class="btn btn-default" />
Run Code Online (Sandbox Code Playgroud)
使用此代码:
def __init__(self, host=None, *args, **kwargs):
super(AuthenticationForm, self).__init__(*args, **kwargs)
self.host = host
self.helper = FormHelper()
self.helper.form_class = 'form-horizontal'
self.helper.label_class = 'col-lg-3'
self.helper.field_class = 'col-lg-8'
self.helper.add_input(
Submit('submit', 'Log Me In', css_class='btn btn-default',)
)
Run Code Online (Sandbox Code Playgroud)
你可以看到我几乎就在那里,有没有办法包括额外的div?
我实现了一个自定义的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就像这个 结果
我正在使用脆皮表单构建一个“创建菜谱”表单,并且尝试使用数据列表输入字段供用户输入自己的成分,例如“大番茄”或从数据库中已有的全局成分中进行选择,例如“番茄”或“鸡肉” 。但是,无论我输入新成分还是选择现有成分,我都会收到以下错误:“选择有效的选择。该选择不是可用的选择之一。”。我该如何修复这个错误?
模型.py
class Recipe(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
websiteURL = models.CharField(max_length=200, blank=True, null=True)
image = models.ImageField(upload_to='image/', blank=True, null=True)
name = models.CharField(max_length=220) # grilled chicken pasta
description = models.TextField(blank=True, null=True)
notes = models.TextField(blank=True, null=True)
serves = models.CharField(max_length=30, blank=True, null=True)
prepTime = models.CharField(max_length=50, blank=True, null=True)
cookTime = models.CharField(max_length=50, blank=True, null=True)
class Ingredient(models.Model):
name = models.CharField(max_length=220)
def __str__(self):
return self.name
class GlobalIngredient(Ingredient):
pass # pre-populated ingredients e.g. salt, sugar, flour, tomato
class UserCreatedIngredient(Ingredient): # ingredients user adds, e.g. Big Tomatoes
user …Run Code Online (Sandbox Code Playgroud)