Добрый день. Хочу решить задачу: создать каталог с категориями первого и второго уровня. К примеру есть модель Марка авто (bmw, ..) и модели (x5, x6, ...). Эти два класса связаны между собой внешним ключом:
class MarkaAvto(models.Model):
title = models.CharField(U'Название марки авто', max_length=255)
slug = models.SlugField(U'URL - относительный путь', max_length=255)
#parent = TreeForeignKey('self', null=True, blank=True, related_name='children')
ico = ImageField(u"Иконка", upload_to=attachment_upload_to, null=True, blank=True)
content = tinymce_models.HTMLField(u'Описание', null=True, blank=True)
is_visible = models.BooleanField(u'Публиковать', default=True)
num = models.IntegerField(u'Порядок вывода', null=True, blank=True)
class ModelAvto(models.Model):
title = models.CharField(U'Название модели авто', max_length=255)
slug = models.SlugField(U'URL - относительный путь', max_length=255)
model = models.ForeignKey(MarkaAvto, verbose_name=u"марка", related_name='+')
ico = ImageField(u"Иконка", upload_to=attachment_upload_to, null=True, blank=True)
is_visible = models.BooleanField(u'Публиковать', default=True)
num = models.IntegerField(u'Порядок вывода', null=True, blank=True)
т.е хочу вывести страницы первого уровня каталога и второго. Второй уоровень каталога связан с первым.
urlpatterns = patterns('rentea.catalog.views',
url(r'^$', MarkaList.as_view(), name='catalog-marka-list'),
url(r'^(?P<slug>\w+)/$', ModelList.as_view(), name='catalog-model-list'),
)
Для первого уровня понятно что делать:
class MarkaList(ListView):
model = MarkaAvto
template_name = "catalog/marka_list.html"
def get_queryset(self):
return MarkaAvto.objects.filter(is_visible=True).order_by('num')
МОМОГИТЕ РАЗОБРАТЬСЯ СО 2-м классом. т.е вывести объекты, которые по внешнему ключу связаны с 1-м класссом.
class ModelList(MarkaList):
model = ModelAvto
template_name = "catalog/model_list.html"
def get_queryset(self):
#self.pk = self.kwargs.get("pk")
return ModelAvto.objects.filter(is_visible=True).order_by('num')
#return ModelAvto.objects.filter(is_visible=True, model=self.pk).order_by('num')