Как удалить объект с помощью функции на основе представления? - PullRequest
0 голосов
/ 25 июня 2019

У меня возникли проблемы при попытке реализовать представление на основе функции удаления, поскольку я не уверен в том, что является правильным синтаксисом.

Пока что этот метод я использую:

def delete_lesson(request, post_id):
    if request.method == 'POST':
        lesson = Lesson.objects.get(post_id=request.get('post_id'))
        lesson.delete()
    return redirect('/')

Я реализовал функцию удаления в моей модели:

class Lesson(models.Model):
    title = models.CharField(max_length=100)
    file = models.FileField(upload_to="lesson/pdf")
    date_posted = models.DateTimeField(default=timezone.now)
    post = models.ForeignKey(Post, on_delete=models.CASCADE, null=False, blank=False)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('lesson_upload', kwargs={'pk': self.pk})

    def delete(self, *args, **kwargs):
        self.file.delete()
        self.title.delete()
        super().delete(*args, **kwargs)



class Post(models.Model):
    title = models.CharField(max_length=100)
    image = models.ImageField(default = 'default0.jpg', upload_to='course_image/')
    description = models.TextField()
    price = models.DecimalField(decimal_places=2, max_digits=6)
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    rating = models.IntegerField(default = 0)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('post-detail', kwargs={'pk' : self.pk})

Мои urls.py:

path('post/<int:post_id>/lesson_delete/', views.delete_lesson, name='delete_lesson'),

1 Ответ

0 голосов
/ 25 июня 2019

У вас есть post_id в вашем URL, который передает идентификатор вашему просмотру, который вы также получили.

Так что, если вы хотите удалить сообщение с идентификатором в вашем URL, тогда вы можете это сделать.do:

lesson = Lesson.objects.get(post_id=post_id)

Если по каким-либо причинам вы получаете идентификатор поста из вашего шаблона и он отличается от идентификатора поста в вашем URL, то вам следует это сделать:

Lesson.objects.get(post_id=request.POST.get('post_id'))

Обратите внимание, что если вы используете второй вариант, который post_id, который вы хотите удалить, отличается от того, что есть в post/<int:post_id>/lesson_delete/, то вам следует передать post_id в качестве данных POST из вашего шаблона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...