我只是想在我的项目中构建一个像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倍)但是在下一步中无法承受它,因为范围。
subjects.html 中属于特定类别的 index.html ,主题列表需要类别 subject.html 中的属于其主题的帖子。能否帮助我找到可行的解决方案
答案 0 :(得分: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)
答案 1 :(得分:0)
queryset = Subject.objects.get(category=parametrocategoria)
queryset = Post.objects.get(subject=parametrosubjet)
您只需选择执行查询