rh0*_*ium 10 django django-templates django-forms
我有一个非管理员表单,我想在其中使用filter_horizontal.我读过这个比我想要的更多(我只想要filter_horizontal).我想检查是否有人想出一个更简单(更新)的方法来实现filter_horizontal.
所以这是代码:
class County(models.Model):
"""County Names"""
name = models.CharField(max_length=64)
state = USStateField(null=True)
class Company(models.Model):
"""The basics of a company"""
name = models.CharField(max_length = 100)
counties = models.ManyToManyField(County,blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)
然后我们的表单目前看起来像这样.我以为这会起作用..
from django.contrib.admin.widgets import FilteredSelectMultiple
class RaterCompanyForm(ModelForm):
class Meta:
model = RaterOrganization
exclude = ('remrate_projects',)
widgets = {'counties': FilteredSelectMultiple(verbose_name="Counties",
is_stacked=True,) }
class Media:
css = {'all':['admin/css/widgets.css']}
js = ['/admin/jsi18n/']
Run Code Online (Sandbox Code Playgroud)
Sup*_*key 13
我知道这个帖子已经过时了,但希望这些信息可以帮助那些偶然发现这个页面的人.
在经历了很多痛苦和痛苦之后,我能够使用Django 1.4.像rh0dium一样,我尝试了所有这些文章,但不得不进行大量的调整.
您不必对ModelForm执行任何特殊操作,但您必须在模板中包含所有这些js和css文件:
<script type="text/javascript" src="/admin/jsi18n/"></script>
<script type="text/javascript" src="{{ STATIC_URL }}admin/js/core.js"></script>
<script type="text/javascript" src="{{ STATIC_URL }}admin/js/jquery.min.js"></script>
<script type="text/javascript" src="{{ STATIC_URL }}admin/js/jquery.init.js"></script>
<script type="text/javascript" src="{{ STATIC_URL }}admin/js/SelectFilter2.js"></script>
<script type="text/javascript" src="{{ STATIC_URL }}admin/js/SelectBox.js"></script>
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}admin/css/widgets.css"/>
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}admin/css/base.css"/>
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}admin/css/forms.css"/>
Run Code Online (Sandbox Code Playgroud)
然后像往常一样渲染表单,但是你需要获得正确的字段集元素和类名才能使css工作.例如:
<fieldset>
<div class="form-row">
<form method="post" action=".">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" value="submit">Add</button>
</form>
</div>
</fieldset>
Run Code Online (Sandbox Code Playgroud)
然后在模板的BOTTOM处(在标记之后渲染表单),添加此脚本并将pricetags替换为模型表单模型上的多对多(M2M)关系名称:
<script type="text/javascript">
addEvent(window, "load", function(e) { SelectFilter.init("id_pricetags", "pricetags", 0, "{{ STATIC_URL }}admin/"); });
</script>
Run Code Online (Sandbox Code Playgroud)
显然,您的媒体位置可能有所不同,但{{STATIC_URL}} admin /为我工作.