Пытаюсь сделать вложенное меню в админке. Через FK self.
models.py
class Category(models.Model):
parent = models.ForeignKey(
'self',
default=None,
blank=True, null=True,
on_delete=models.CASCADE,
related_name='parent_%(class)s',
verbose_name='parent comment'
)
name = models.CharField('Категория',max_length=20)
slug = models.SlugField('Текст в url', max_length=200, unique=True)
class Meta:
ordering = ['name']
verbose_name = 'Категория'
verbose_name_plural = 'Категории'
def __str__(self):
return self.name
def get_absolute_url(self):
if self.sex == 'M':
return reverse('category_for_men', args=[str(self.slug)])
else:
return reverse('category_for_women', args=[str(self.slug)])
Query
"post_list_for_man": Category.objects.all(),
template
{% for x in post_list_for_man %}
{% if x.parent %}
<li class="has-children">
<a href="{{ x.parent.get_absolute_url }}" title="">{{ x.parent }}</a>
<ul class="sub-menu">
<li><a href="{{ x.get_absolute_url }}">{{ x }}</a></li>
</ul>
</li>
{% endif %}
{% endfor %}
И если я добавлю следующим образом.
Категория
Подкатегория
Вторая подкатегория
Категория не имеет родителя
Подкатегория имеет родителя Категория
Вторая подкатегория имеет родителя Категория
Шаблон выдает
x.parent
2 одинаковых значения - Категория, нужно одно, как-то юзать дистинкт.
Ну и соответственно в выпадающем меню у Категории подкатегории разные.
Как реализовать такое правильно?