Как показать подкатегорию подкатегории в Django? - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть следующие модели:

class TutorialCategory(models.Model):
    category_title = models.CharField(max_length=150)
    category_summary = models.CharField(max_length=150)
    category_slug = models.SlugField(default=1, blank=True) 

class TutorialSeries(models.Model):
    series_title = models.CharField(max_length=200)
    series_maincategory = models.ForeignKey(
        TutorialCategory, default=1, on_delete=models.SET_DEFAULT)
    series_summary = models.CharField(max_length=200)

class Tutorial(models.Model):
    tutorial_title = models.CharField(max_length=150)
    tutorial_content = models.TextField()
    tutorial_published = models.DateTimeField(
        "date Published", default=datetime.now())
    tutorial_series = models.ForeignKey(
        TutorialSeries, default=1, on_delete=models.SET_DEFAULT)
    tutorial_slug = models.SlugField(default=1, blank=True)

Как показано выше TutorialCategory - это основная категория, TutorialSeries - это подкатегория, а Tutorial - это подкатегория. Я создал простое представление, которое показывает подкатегории основных категорий, но не знаю, как показать подкатегории подкатегории. Пожалуйста, проверьте views.py и urls.py, если вы можете улучшить его качество и есть ли простой и лучший способ сделать это. Во всяком случае, это вид:

def single_slug(request, single_slug):
    matching_series = TutorialSeries.objects.filter(
        series_maincategory__category_slug=single_slug)

    series_urls = {}
    for i in matching_series.all():
        part_one = Tutorial.objects.filter(

tutorial_series__series_title=i.series_title).earliest("tutorial_published")
    series_urls[i] = part_one.tutorial_slug

return render(request, 'tutorial/sub-category.html', context={
    "tutorial_series": matching_series,
    'part_ones': series_urls
})

URL-адреса здесь:

urlpatterns = [
    path('', views.home_page, name='home'),
    path('tutorial/<int:id>/', views.tutorial_detail, name='tutorial_detail'),
    path('<single_slug>/', views.single_slug, name='single_slug'),
]

шаблон, показывающий подкатегорию основной категории:

   {% for tut, partone in part_ones.items %}

    <div class="card">
        <div class="card-body">
            <h5 class="card-title">{{ tut.series_title }}</h5>
            <p>{{ tut.series_summary }}</p>
            <a href="{{ partone }}">Read more</a>
        </div>
    </div>
    {% endfor %}

Пожалуйста, помогите мне, как это сделать, и если вы знаете какой-нибудь лучший способ сделать это, пожалуйста, дайте мне знать и помогите мне. Заранее большое спасибо.

редактировать: @ruddra Я изменил views.py на этот проход matching_series

def single_slug(request, single_slug):
    matching_series = TutorialSeries.objects.filter(
        series_maincategory__category_slug=single_slug)

    series_urls = {}
    for i in matching_series.all():
        part_one = Tutorial.objects.filter(
            tutorial_series__series_title=i.series_title).earliest("tutorial_published")
        series_urls[i] = part_one.tutorial_slug

    return render(request, 'tutorial/sub-category.html', context={
        "matching_series": matching_series,
        'part_ones': series_urls
    })

и заменил предыдущий шаблон на ваш. шаблон здесь:

    {% for tutorial in matching_series %}
        {% for sub_cat in tutorial.tutorialseries_set.all %}
            {{ sub.series_title }}

            {% for sub_sub_cat in sub.tutorial_set.all %}
                {{ sub_sub_cat.tutorial_title }}
            {% endfor %}
        {% endfor %}
    {% endfor %}

1 Ответ

1 голос
/ 25 апреля 2019

Вы можете попробовать вот так:

 {% for sub_cat in matching_series %}
          {% for sub_sub_cat in sub_cat.tutorial_set.all %}
             {{ sub_sub_cat.tutorial_title }}
          {% endfor %}
  {% endfor %}

Здесь я предполагаю, что matching_series передается через контекст из представления в single_slug.Затем я использую обратное отношение между различными моделями для извлечения данных.

Объяснение: Предполагается, что существует объект с именем tutorial_category, который является экземпляром TutorialCategory.Поскольку существует значение ForeignKey от TutorialSeries до TutorialCategory, я могу использовать tutorial_category.tutorialseries_set.all() или .filter() и т. Д. Для извлечения серии уроков из объекта tutorial_category (Поскольку я рендерил его в шаблоне, я удалил скобки после all).Точно так же я получаю Tutorial от TutorialSeries.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...