Метод модели Django не вносит изменения в объект

У меня есть метод в моей модели для изменения объекта из опубликованного в неопубликованный. Перенаправление работает нормально, но в моей базе данных ничего не происходит. Если объект опубликован, то он остается таким без изменений, когда нажимается кнопка для неопубликования объекта (статья в блоге)

Это модель и метод

class Post(models.Model):
    title = models.CharField(max_length=200)
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True)
    published = models.BooleanField(default=False, null=True, blank=True)

   def unpublish(self):
        self.published == False
        self.save()

Мое мнение

def unpublish_post(request, slug):
    post = get_object_or_404(Post, slug=slug)
    post.unpublish
    return redirect('dashboard')

Мой urls.py

    path('unpublish-post/<slug>/', unpublish_post, name='unpublish-post'),

Есть три незначительные ошибки:

  1. you set a variable with a single equal sign (=), not a double equal sign (==);
  2. you should call the .unpublish() method; and
  3. you should only allow to access this view in a POST or DELETE request.

В вашей модели, таким образом, мы переписываем логику так:

class Post(models.Model):
    # …

    def unpublish(self):
        self.published = False
        self.save()

а в представлении мы вызываем метод и ограничиваем доступ для POST и/или DELETE запроса:

from django.views.decorators.http import require_http_methods

@require_http_methods(['POST', 'DELETE'])
def unpublish_post(request, slug):
    post = get_object_or_404(Post, slug=slug)
    post.unpublish()
    return redirect('dashboard')

Таким образом, клиенту необходимо сделать запрос POST/DELETE, а не GET. Таким образом, шаблон должен выглядеть следующим образом:

<form method="POST" action="{% 'unpublish-post' post.slug %}">
    <input type="submit" value="unpublish">
</form>
Вернуться на верх