我无法找到一种方法来识别django模板中字段的类型.我的解决方案是创建一个简单的过滤器来访问字段和窗口小部件类名.我已经包含了下面的代码,以防它对其他人有帮助.
有更好的方法吗?
## agency/tagutils/templatetags/fieldtags.py
###############################################################
from django import template
register = template.Library()
@register.filter(name='field_type')
def field_type(value):
return value.field.__class__.__name__
@register.filter(name='widget_type')
def widget_type(value):
return value.field.widget.__class__.__name__
## client/project/settings.py
###############################################################
INSTALLED_APPS = (
# ...
'agency.tagutils',
)
## client/project/templates/project/field_snippet.html
###############################################################
{% load fieldtags %}
<div class="field {{ field|field_type }} {{ field|widget_type }} {{ field.name }}">
{{ field.errors }}
<div class="form_label">
{{ field.label_tag }}
</div>
<div class="form_field">
{{ field }}
</div>
</div>
## sample output html
###############################################################
<div class="field CharField TextInput family_name">
<div class="form_label">
<label for="id_family_name">Family …Run Code Online (Sandbox Code Playgroud) 我有一个模型以及基于该模型的ModelForm.ModelForm包含一个ModelMultipleChoice字段,我在ModelForm的子类中指定:
class TransactionForm(ModelForm):
class Meta:
model = Transaction
def __init__(self, *args, **kwargs):
super(TransactionForm, self).__init__(*args, **kwargs)
self.fields['category'] = forms.ModelChoiceField(queryset=Category.objects.filter(user=user))
Run Code Online (Sandbox Code Playgroud)
如您所见,我需要按用户过滤类别查询集.换句话说,用户应该只在下拉列表中看到自己的类别.但是,当用户,或者更具体地说,request.user在Model实例中不可用时,我该怎么做呢?
编辑:添加我的CBV子类:
class TransUpdateView(UpdateView):
form_class = TransactionForm
model = Transaction
template_name = 'trans_form.html'
success_url='/view_trans/'
def get_context_data(self, **kwargs):
context = super(TransUpdateView, self).get_context_data(**kwargs)
context['action'] = 'update'
return context
Run Code Online (Sandbox Code Playgroud)
我试过form_class = TransactionForm(user=request.user),我得到一个NameError,说没有找到请求.
我知道如何设置 Django 表单以让 Django 呈现它们。不幸的是,造型形式变得不太直接。我有兴趣找到一种方法让 HTML 表单将其输入的值传递给 Django。HTML 表单完全用 HTML 和 CSS 编程。仅供参考,请在下面找到我因多种原因而拒绝的解决方案列表:
我对前两个解决方案的问题是,我的表单中的 s 依赖于类属性,这些属性将它们分配到左列或右列(col_half 和 col_half col_last)。
第三个对我来说不太适用,因为我的表单没有使用列表项。如果我碰巧将表单转换为列表项,则会在表单字段中添加一个奇怪的边框(请参见下面的屏幕截图)。
因此,我想知道是否有一种方法可以保留我的 HTML 模板并将其值一一分配给 forms.py 而不会得到这个奇怪的边框(理想情况下我想坚持我的输入标签)?任何广告建议将不胜感激。
请参阅下面的 HTML 表单:
<form id="register-form" name="register-form" class="nobottommargin" action="#" method="post">
<div class="col_half">
<label for="register-form-name">First Name:</label>
<input type="text" id="register-form-name" name="register-form-name" value="" class="form-control"/>
</div>
<div class="col_half col_last">
<label for="register-form-name">Last Name:</label>
<input type="text" id="register-form-name" name="register-form-name" value="" class="form-control" />
</div> …Run Code Online (Sandbox Code Playgroud)我已经重新定义了联系我们页面的表单,这是标准的django-form东西,但我很难理解如何在<inpout>字段内编写描述.
确切地说,我想Name在<input>字段内写,所以我该怎么做呢.我定义了<input>字段{{ form.name }},所以如何定义它更像<input type="name" class="form-control" id="id_name" placeholder="Your Name">.
<div class="col-xs-12 col-sm-12 col-md-4 col-md-offset-2 col-lg-4">
{% if form.errors %}
<p style="color: red">
Please correct the error{{ form.errors|pluralize }} below.
</p>
{% endif %}
<form class="form-horizontal" action="." method="POST">
{% csrf_token %}
<div class="field form-group">
{{ form.name.errors }}
<label for="id_name" class="control-label"></label>
<div class="col-sm-10">
{{form.name}}
</div>
</div>
<div class="field form-group">
{{ form.email.errors }}
<label for="id_email" class="control-label"></label>
<div class="col-sm-10">
{{ …Run Code Online (Sandbox Code Playgroud)