Я просто хочу построить каскадную структуру, такую как 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. Можете ли вы помочь мне с поиском рабочего раствора
Подождите 5 минут. Я пишу ответ. – Darius