#python #django
#python #django
Вопрос:
У меня есть следующие модели:
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
можете ли вы улучшить его качество, и если есть простой и лучший способ сделать это. В любом случае, это view:
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. Предполагая, что ошибка заключается в том, что часть вашего шаблона, которую вы опубликовали, не отображается на странице: вы проверили, содержит ли какой-либо из
part_one
наборов запросов в представлении что-либо (просто распечатайте это на консоли)? Возможно, запросы просто пусты и, следовательно,{% for %}
цикл просто никогда не выполняется.
Ответ №1:
Вы можете попробовать вот так:
{% 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 from TutorialSeries
to TutorialCategory
, я могу использовать tutorial_category.tutorialseries_set.all()
or .filter()
etc для извлечения серии учебных пособий из tutorial_category
объекта (поскольку я визуализирую его в шаблоне, я убрал скобки после all
). Аналогично я извлекаю Tutorial
из TutorialSeries
.
Комментарии:
1. Спасибо @ruddra, я только что отредактировал свой ответ. Я передал matching_series из представления в шаблон и заменил
backward relation
своим предыдущим кодом. Это не сработало, что я сделал не так?2. Я допустил ошибку в своем коде. Я обновил ответ. Пожалуйста, попробуйте обновленный ответ
3. те же результаты @ruddra
4. что произойдет, если вы попытаетесь с
{% for tutorial in tutorial_series %}
?5. не работает, брат, теперь он даже не отображает подкатегорию. Вы хотите получить и просмотреть все коды для проверки