2010-01-29 115 views
1

我已经得到如下所示的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) 

回答

0

为什么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> 
+0

是,类别可以具有几位父母。有什么方法可以修改表单的呈现方式吗? – jul 2010-01-30 20:38:38

+0

我不这么认为,但是你真的需要将类别列表作为表单的一部分吗?您可以单独渲染它,并将所有标记都包含在

标记中。 如果一个类别可以有多个父母,你想让它多次显示吗?如果是,只需为每个顶级类别调用render_category。如果不是,您可能应该为此定义一个自定义标签。 – 2010-01-30 22:24:21

相关问题