Django: настроить форму в шаблоне в соответствии с атрибутом поля - PullRequest
1 голос
/ 29 января 2010

У меня есть модель категории и форма SearchForm, показанные ниже. Я хотел бы сделать 2 вещи в моем шаблоне:

- разделить в форме экземпляры Category, имеющие заданный тип, чтобы иметь возможность применять к ним определенный стиль в моем CSS

- показать иерархию экземпляров моей категории

В основном мне нужно получить доступ к родителю и стилю категории в моем шаблоне или изменить визуализацию моей формы. Как я могу это сделать? Спасибо Июль

Категория модели

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) 

1 Ответ

0 голосов
/ 30 января 2010

Почему parent a 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...