建立级联结构

时间:2015-09-30 19:52:41

标签: python django django-templates django-views

我只是想在我的项目中构建一个像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 中的属于其主题的帖子。能否帮助我找到可行的解决方案

2 个答案:

答案 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)

您只需选择执行查询