В мини-приложении блога я хочу создать удалить функцию, так, чтобы владелец блога мог удалить свои записи (и только свои записи). Я предполагаю, что единственные методы для того, чтобы сделать делают, использует форму. Хотя мой, код удаления кажется четким и корректным, он не работает. Мой код:
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, и удалить другую запись (в конечном счете не один из его)
В общем, для удаления объектов лучше использовать 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-адресов непосредственно в ваших шаблонах.