Сложно связать комментарии к постам (Django) - PullRequest
0 голосов
/ 28 января 2020

Я получил ошибку dispatch() missing 1 required positional argument: 'slug'. Я пробовал def dispatch(self, request, slug=none, *args, **kwargs): и def dispatch(self, request, slug=title, *args, **kwargs):. Я хочу, чтобы люди могли добавлять комментарии к сообщениям. Я пробовал различные эксперименты (включая несколько перечисленных выше), и каждый эксперимент приводил к сообщению об ошибке, которое я не мог разрешить.

ListView теперь не работает должным образом

При попытке решить мою проблему мне удалось предотвратить работу ListView.

class PostListView(ListView):
    model = Post
    template_name = 'blog/home.html'  # <app>/<model>_<viewtype>.html
    context_object_name = 'posts'
    ordering = ['-date_posted']

Я добавил эти строки кода в модель, вызвавшую проблему.

url= models.SlugField(max_length=500, unique=True, blank=True)

    def save(self, *args, **kwargs):
        self.url= slugify(self.title)
        super(UserPost, self).save(*args, **kwargs)

views.py

class PostDetailView(DetailView):
    model = Post

    def dispatch(self, request, slug, *args, **kwargs):
        post = get_object_or_404(Post)
        comments = post.comments.filter(active=True, slug=slug)
        new_comment = None

        if request.method == 'POST':
            abc
            else:
                xyz

models.py

Обновление - я пробовал добавить SlugField на основе комментария Педроса.

class Post(models.Model):
    title = models.CharField(max_length=20)
    content =  models.TextField()
    date_posted = models.DateTimeField(default=timezone.now())
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    url= models.SlugField(max_length=500, unique=True, blank=True)



def save(self, *args, **kwargs):
        self.url= slugify(self.title)
        super(UserPost, self).save(*args, **kwargs)


    def __str__(self):
        return self.title 

    def get_absolute_url(self):
        return reverse('article_detail', kwargs={'slug': self.slug})


class Comment(models.Model):
    post = models.ForeignKey(Post,on_delete=models.CASCADE,related_name='comments')
    name = models.CharField(max_length=30)
    email = models.EmailField()
    body = models.TextField()
    created_on = models.DateTimeField(auto_now_add=True)
    active = models.BooleanField(default=True)

urls.py

from django.urls import path
from .views import (
    PostListView,
    PostDetailView,
    PostCreateView,
    PostUpdateView,
    PostDeleteView
)
from. import views
from django.views.generic import TemplateView

urlpatterns = [
    path('', PostListView.as_view(), name='blog-home'),
    path('post/<int:pk>/', PostDetailView.as_view(), name='post-detail'),
    path('post/new/', PostCreateView.as_view(), name='post-create'),
    path('post/<int:pk>/update/', PostUpdateView.as_view(), name='post-update'),
    path('post/<int:pk>/delete/', PostDeleteView.as_view(), name='post-delete'),
    path('about/', views.about, name='blog-about'),
    path('facebook/',TemplateView.as_view(template_name='blog/index.html'), name="facebook")
]
...