Удаление объектов в Django

В мини-приложении блога я хочу создать удалить функцию, так, чтобы владелец блога мог удалить свои записи (и только свои записи). Я предполагаю, что единственные методы для того, чтобы сделать делают, использует форму. Хотя мой, код удаления кажется четким и корректным, он не работает. Мой код:

def delete_new(request,id):
   u = New.objects.get(pk=id).delete()
   if request.method == 'POST':
       form = DeleteNewForm(request.POST)    
       form.u.delete()             
       form.save()   
   return render_to_response('news/deleteNew.html', {
           'form': form,
           }, 
        context_instance=RequestContext(request)) 

и в шаблоне:

<a href='/news/delete_new/{{object.id}}/'> Delete</a> <br /> 

Действительно ли это - корректный подход? Я имею в виду, создавая форму для этого? также, единственный способ взять сообщение в блоге, связанное со ссылкой удаления, имеет идентификатор в качестве параметра. Действительно ли это правильно? Я имею в виду, возможно, любой пользователь может ввести другой идентификатор, в URL, и удалить другую запись (в конечном счете не один из его)

22
задан Siegmeyer 9 March 2018 в 12:56
поделиться

1 ответ

В общем, для удаления объектов лучше использовать POST (или DELETE) HTTP-методы .

Если вы действительно хотите использовать HTTP GET в своем примере, вот что вам нужно исправить:

Если у вас есть URL, указывающий на какой-то URL, подобный вашему: Удалить , тогда вы можете просто написать представление, которое будет проверять, принадлежит ли объект зарегистрированному пользователю, и удалить эту запись, если да, как в уже написанном вами коде:

def delete_new(request,id):
   #+some code to check if New belongs to logged in user
   u = New.objects.get(pk=id).delete()

Чтобы проверить, не принадлежат ли новые объекты какому-либо пользователю, вам необходимо создать связь между Пользователь и Новый (например, created_by = models.ForeignKey (User) в Новая модель ).

Вы можете войти в систему следующим образом: request.user

Надеюсь, я правильно понял вашу точку зрения, и мой ответ как-то вам поможет.

PS: Вы также можете рассмотреть возможность использования тега {% url%} вместо написания URL-адресов непосредственно в ваших шаблонах.

20
ответ дан 29 November 2019 в 04:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: