2015-09-30 7 views
0

Я просто хочу построить каскадную структуру, такую ​​как Category-Subject-Post в моем проекте. Вот мой код:Строительство каскадной структуры

models.py:

class Category(models.Model): 
    category_name = models.CharField(max_length=60, unique=True) 
    slug_category = models.SlugField(unique=True) 

    def get_absolute_url(self): 
    return reverse("skill:subjects", kwargs={"slug_category": self.slug_category}) 

class Subject(models.Model): 
    category = models.ForeignKey(Category) 
    subject_name = models.CharField(max_length=100, unique=True) 
    slug_subject = models.SlugField(unique=True) 


    def get_absolute_url(self): 
    return reverse("skill:subject", kwargs={ 
     "slug_category": self.category.slug_category, 
     "slug_subject": self.slug_subject 
    }) 


class Post(models.Model): 
    subject = models.ForeignKey(Subject) 
    ... 

views.py:

def index(request): 
    context = { 
     'category_it': Category.objects.filter(class_name='IT'), 
     'category_ps': Category.objects.filter(class_name='PS'), 
     'category_ac': Category.objects.filter(class_name='AC'), 
     'category_tc': Category.objects.filter(class_name='TC'), 
     'category_sc': Category.objects.filter(class_name='SC'), 
     'category_ss': Category.objects.filter(class_name='SS'), 
    } 
    return render(request, 'skill/index.html', context) 

class SubjectsView(generic.ListView): 
    model = Subject 
    queryset = Subject.objects.all() 
    template_name = "skill/subjects.html" 


class SubjectView(generic.ListView): 
    model = Post 
    queryset = Post.objects.all() 
    template_name = 'skill/subject.html' 

urls.py:

url(r'^$', views.index, name='index'), 
    # /programming 
    url(r'^(?P<slug_category>[\w-]+)/$', views.SubjectsView.as_view(), name='subjects'), 
    # /programming/git 
    url(r'^(?P<slug_category>[\w-]+)/(?P<slug_subject>[\w-]+)/$', views.SubjectView.as_view(), name='subject'), 
    # /programming/git/43121 
    url(r'^(?P<slug_category>[\w-]+)/(?P<slug_subject>[\w-]+)/(?P<pk>[0-9]+)/$', views.post, name='post'), 
] 

шаблоны:

index.html:

{% for category in category_it %} 
    <a href="{% url 'skill:subjects' category.slug_category %}" class="item">{{ category }}</a> 
{% endfor %} 

subjects.html:

{% for object in object_list %} 
    <a href="{{ object.get_absolute_url }}" class="item"><h4>{{ object }}</h4></a> 
{% endfor %} 

Я не знаю, какой запрос мне нужен для этого и где (представления или шаблон), я пробовал и жестко закодировал его (индекс в views.py и шаблон, но в 6 раз больше), но не может позволить себе это на следующем шаге из-за объем.

мне нужно категории в index.html, список предметов, относящихся к определенной категории в subjects.html и сообщения, относящиеся к их теме в subject.html. Можете ли вы помочь мне с поиском рабочего раствора

+0

Подождите 5 минут. Я пишу ответ. – Darius

ответ

0
queryset = Subject.objects.get(category=parametrocategoria) 
queryset = Post.objects.get(subject=parametrosubjet) 

Вы просто выбираете, чтобы выполнить запрос,

+0

Да, что я имею в виду. – Darius

1

Этот сайт имеет неоценимое значение для работы свой путь вокруг Class Based Views (ListView)

Я думаю, что вам нужно переопределить метод get , что-то вроде этого:

class SubjectsView(generic.ListView): 
    ... 
    def get(self, request, *args, slug_category=None, **kwargs): 
     if slug_category: 
      self.queryset = Subject.objects.filter(category__slug_category=slug_category) 
     super(SubjectsView, self).get(request, *args, slug_category=slug_category, **kwargs) 
Смежные вопросы