Я реализовал функцию «Tag», но не могу получить результат из базы данных. На самом деле, мой запрос в представлении показывает «Нет» как результат, когда я пытаюсь отладить его с помощью PDB.
Я не знаю, что делать, прошло несколько дней.
models.py
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.urls import reverse
from taggit.managers import TaggableManager
class PublishedManager(models.Manager):
def get_queryset(self):
return super(PublishedManager, self).get_queryset().filter(status='published')
class Post(models.Model):
STATUS_CHOICES = (
('draft', 'draft'),
('published', 'published')
)
title = models.CharField(max_length=250)
slug = models.SlugField(max_length=250, unique_for_date='publish')
author = models.ForeignKey(User, on_delete='models.CASCADE', related_name='blog_posts')
body = models.TextField()
publish = models.DateTimeField(default=timezone.now)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')
objects = models.Manager()
published = PublishedManager()
tags = TaggableManager()
class Meta:
ordering = ('-publish',)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('core:post_detail', args=[self.publish.year,self.publish.month,self.publish.day,self.slug])
views.py
from django.shortcuts import render, get_object_or_404
from .models import (
Post,
Comment
)
from django.core.paginator import (
Paginator,
EmptyPage,
PageNotAnInteger
)
from django.views.generic import (
ListView,
)
from .forms import (
EmailPostForm,
CommentForm
)
from django.core.mail import send_mail
from taggit.models import Tag
def post_list(request, tag_slug=None):
"""
Tags also included.
"""
page_posts = Post.published.all()
# Tags
tag = None
if tag_slug:
tag = get_object_or_404(Tag, slug=tag_slug)
page_posts = page_posts.filter(tags__in=[tag])
paginator = Paginator(page_posts, 2)
page = request.GET.get('page')
try:
posts = paginator.page(page)
except PageNotAnInteger:
posts = paginator.page(1)
except EmptyPage:
posts = paginator.page(paginator.num_pages)
context = {
'page':page,
'posts':posts,
'tag': tag
}
breakpoint()
return render(request, 'core/list.html', context)
urls.py
from django.contrib import admin
from django.urls import path, include
from . import views
app_name = 'core'
urlpatterns = [
path('', views.post_list, name='post_list'),
path('tag/<slug:tag/>', views.post_list, name='post_list_by_tag'),
path('<int:year>/<int:month>/<int:day>/<slug:post>/', views.post_detail, name='post_detail'),
path('<int:post_id>/share/', views.post_share, name='post_share')
]
html - list.html
{% extends "core/base.html" %}
{% block title %}Home{% endblock title %}
{% block content %}
<div class="container mt-5"></>
<h1>Blogus</h1>
</br>
{{ posts.tag.all }}
<!-- tags -->
{% for tag in post.tags.all %}
<a href="{% url 'core:post_list_by_tag' tag.slug %}">
{{ tag.name }}
</a>
{% if not forloop.last %}, {% endif %}
{% endfor %}
{% if tag %}
<h2>Posts tagged with "{{ tag.name }}"</h2>
{% endif %}
{% for post in posts %}
<a href='{{ post.get_absolute_url }}'><b>{{ post.title }}</b></br></br></a>
<p class="date">
Published on <b>{{ post.publish }}</b> by <b>{{ post.author }}</b>
</p>
{{ post.body|truncatewords:30|linebreaks}}</br>
{% endfor %}
{% include "core/pagination.html" with page=posts %}
</div>
{% endblock content %}
Любая помощь будет высоко ценится. Я застрял на несколько дней.