ListView перестал работать после добавления поля Slug в модель - PullRequest
0 голосов
/ 28 января 2020

При попытке решить одну проблему мне удалось предотвратить работу ListView. Я попробовал поискать в Google проблему, но получил тысячи страниц теории и, к сожалению, никакого реального руководства.

class PostListView(ListView):
    model = Post
    template_name = 'blog/home.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)

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=350, 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=40)
    email = models.EmailField()
    body = models.TextField()
    created_on = models.DateTimeField(auto_now_add=True)
    active = models.BooleanField(default=False)

1 Ответ

1 голос
/ 28 января 2020

Имя вашей модели Post, поэтому вы должны использовать его в качестве аргумента super:

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

Или, если вы используете Python 3, вы можете просто оставить super() без каких-либо аргументов :

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