Generic UpdateView не работает с slug

Я новичок в django. Я пытаюсь обновить сообщение с помощью универсального UpdateView. Но сообщение не обновляется после заполнения формы. Я получаю доступ к представлению обновления через URL-адрес slug.

Моя модель:

class Post(models.Model):
title = models.CharField(max_length=60)
post_body = models.TextField()
time_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete= models.CASCADE)
slug = models.SlugField(null=False,unique=True)

def __str__(self):
    return self.title

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

def save(self,*args,**kwargs):
    if not self.slug:
        author_id = str(self.author.id)
        self.slug = slugify(self.title +'-'+author_id)
        return super().save(*args, **kwargs)

Мой взгляд:

class postupdate(LoginRequiredMixin,UserPassesTestMixin,UpdateView):
model = Post
fields = ['title','post_body']

def form_valid(self, form):
    form.instance.author = self.request.user
    return super().form_valid(form)

def test_func(self):
    post = self.get_object()
    if self.request.user == post.author:
        return True
    else:
        return False

Мой адрес:

path('post/<slug:slug>/updatepost/', postupdate.as_view(),name = 'updatepost'),

person Ahmed    schedule 27.08.2020    source источник


Ответы (1)


Похоже, что метод save() не вызывается каждый раз.

class Post(models.Model):
    # rest of your code

    def save(self, *args, **kwargs):
        if not self.slug:
            author_id = str(self.author.id)
            self.slug = slugify(self.title + '-' + author_id)

        return super().save(*args, **kwargs) # outside the `if...` clause
person JPG    schedule 27.08.2020