Django:根据字段属性自定义模板中的表单
问题描述:
我已经得到如下所示的Category模型和SearchForm表单。我想要做的两件事情在我的模板:Django:根据字段属性自定义模板中的表单
-to形式单独具有给定类型的分类情况下,能够为特定样式应用到他们在我的CSS
-to显示我的类别实例的层次结构
基本上我需要访问我的模板中类别的父级和样式,或者修改我的表单的呈现。 我该怎么做? 感谢 七月
分类模型
CATEGORY_TYPE = [
(1, 'region'),
(2, 'type'),
]
class Category(models.Model):
parent = models.ManyToManyField('self', symmetrical=False, null=True, blank=True)
type = models.PositiveSmallIntegerField(choices=CATEGORY_TYPE)
class Translation(multilingual.Translation):
name = models.CharField(max_length=100, unique=True)
class Meta:
verbose_name_plural = 'Categories'
def __unicode__(self):
return "%s" %(self.name)
SearchForm类
class SearchForm(forms.Form):
query = forms.CharField(max_length=100, required=False)
price_range = forms.IntegerField(widget=forms.Select(choices = PRICE_RANGES_AND_EMPTY), required=False)
def __init__(self, *args, **kwargs):
super(SearchForm, self).__init__(*args, **kwargs)
self.fields['country'] = forms.ModelChoiceField(queryset=Country.objects.all().order_by('name'), empty_label='All', required=False)
self.fields['category'] = forms.ModelMultipleChoiceField(queryset=Category.objects.all().order_by('name'),
widget=forms.CheckboxSelectMultiple(), required=False)
答
为什么parent
一个ManyToManyField
?一个类别可以有多个父项吗?
下面应显示category
及其后代,并突出显示类型special
的类:
在Python:
class Level:
def __init__(self, value):
self.value = value
def __str__(self):
return str(self.value)
def inc(self):
return Level(self.value + 1)
render_to_response("render_category.html", { 'level' : Level(0), 'category' : category, 'special' : special })
render_category.html:
<div class = "category {% ifequal category.type special %}special{% endif %} level-{{ level }}">
{% for child in category.category_set.all %}
{% with child as category %}
{% with level.inc as level %}
{% include "render_category.html" %}
{% endwith %}
{% endwith %}
{% endfor %}
</div>
是,类别可以具有几位父母。有什么方法可以修改表单的呈现方式吗? – jul 2010-01-30 20:38:38
我不这么认为,但是你真的需要将类别列表作为表单的一部分吗?您可以单独渲染它,并将所有标记都包含在