Deleting posts via Django command does not work. I do not know what to do, I am at a dead end. I hope you can help me...
delnc.py File command
class Command(BaseCommand):
help = 'Командa для удаления всех постов из категории'
requires_migrations_checks = True
missing_args_message = 'Недостаточно аргументов'
def add_arguments(self, parser):
parser.add_argument('category_name', type=str)
def handle(self, *args, **options):
print('Мастер код: 7548')
answer = input('Введите Мастер код для удаления: ')
if answer == '7548':
try:
category = str(options['category_name'])
Post.objects.filter(postCategory__category_name=category).delete()
Post.save()
self.stdout.write(self.style.SUCCESS(f'Успешно. Все новости категории {category} удалены!'))
except Post.DoesNotExist:
self.stdout.write(self.style.ERROR('Нет такой категории! Отказано!'))
else:
self.stdout.write(self.style.ERROR('В доступе отказано!'))
models.py
class Category(models.Model):
category_name = models.CharField(max_length=64, unique=True)
subscribers = models.ManyToManyField(User, blank=True, null=True)
class Meta:
verbose_name = 'Категория'
verbose_name_plural = 'Категории'
def __str__(self):
return self.category_name
class Post(models.Model):
PostAuthor = models.ForeignKey(Author, on_delete=models.CASCADE, verbose_name='Автор поста')
PostNews = 'PN'
PostArticle = 'PA'
# «статья» или «новость»
POSITIONS = [
(PostArticle, 'Статья'),
(PostNews, 'Новость'),
]
postCategory = models.ManyToManyField(Category, verbose_name='Категория поста', through='PostCategory')
title = models.CharField(max_length=50, verbose_name='Название')
positions = models.CharField(max_length=2, choices=POSITIONS, default=PostArticle, verbose_name='Тип поста')
category_id = models.ForeignKey(Category, verbose_name='Категория', null=True, on_delete=models.CASCADE, related_name='category_id')
data = models.DateTimeField(auto_now_add=True, verbose_name='Дата создания')
data_update = models.DateTimeField(auto_now=True, verbose_name='Дата редактирования')
photo = models.ImageField(upload_to='photos/%Y/%m/%d/', verbose_name='Фото', blank=True, default='/photos/def/1.jpg/')
previewName = models.CharField(max_length=128, verbose_name='Превью поста')
text = models.TextField(verbose_name='Текст поста')
rating = models.SmallIntegerField(default=0, verbose_name='Рейтинг')
public = models.BooleanField(default=True, verbose_name='Опубликовано')
def like(self):
self.rating +=1
self.save()
def dislike(self):
self.rating -=1
self.save()
def preview(self):
return self.text[0:124] + '...'
def __str__(self):
return self.title
class Meta:
verbose_name = 'Пост'
verbose_name_plural = 'Посты'
def get_absolute_url(self):
return f'/news/{self.pk}'
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
cache.delete(f"new-{self.pk}")
Here is the output from the console
But he does not delete anything, although he writes that everything was completed successfully

Post.save()does not do anything, because it is called on the model class and not on an instance. I don't think you need that call, because.delete()already does the work.posts = Post.objects.filter(postCategory__category_name=category), thenprint(posts)and finallyposts.delete(); this will show you if any objects were found