Python Django supprimer de l'objet courant
Cas, je suis dans /notes/obtenir/1/where id=1 et j'ai créé une Supprimer la Note" lien note.html. J'en ai besoin pour supprimer le actuelle note de base de données et des applications et de les rediriger vers /notes/tous les. Pouvez-vous m'aider avec le code de la def supprimer?
models.py:
class Note(models.Model):
title = models.CharField(max_length=200)
body = models.TextField()
cr_date = models.DateTimeField(auto_now_add=True)
urls.py:
urlpatterns = patterns('',
url(r'^all/$', 'note.views.notes'),
url(r'^get/(?P<note_id>\d+)/$', 'note.views.note'), #
url(r'^language/(?P<language>[a-z\-]+)/$', 'note.views.language'), #
url(r'^create/$', 'note.views.create'),
url(r'^delete/$', 'note.views.delete'), <--------------------------
url(r'^search/$', 'note.views.search_titles'),
)
views.py:
def delete(??????):
????? <-------------------------------------------
return HttpResponseRedirect('/notes/all')
OriginalL'auteur Konstantinos Korovesis | 2013-10-15
Vous devez vous connecter pour publier un commentaire.
Et dans
urls.py
Assurez-vous que vous vérifiez les autorisations de l'utilisateur avant de supprimer un objet, vous pouvez utiliser le @permission_required décorateur https://docs.djangoproject.com/en/1.5/topics/auth/default/#the-permission-required-decorator. Si vous ne cochez pas cette un utilisateur peut supprimer toutes les notes facilement.
Habituellement, il est une bonne idée de supprimer les objets de la DB à l'aide d'un POST ou SUPPRIMER la demande, au lieu d'une. Imaginez que google-bot analyse votre site et les visites notes/supprimer/2.
get_object_or_404(Note, pk=id)
au lieu de.get()
vous avez raison
C'est tellement une évidence , mais il ya quelque chose de mal avec l'url de la Page n'est pas trouvée (erreur 404) Méthode de Requête: Requête GET à l'URL: 127.0.0.1:8000/notes/supprimer
avez-vous essayé
127.0.0.1:8000/notes/delete/1/
? (Note de la barre oblique)avez-vous votre urls.py dans notes/urls.py ou dans la racine du projet? Si vous avez dans la racine du projet essayez avec
url(r'^notes/delete/(?P<id>\d+)/$','project.app.views.delete'),
OriginalL'auteur fasouto
Vous n'avez pas besoin d'écrire ces points de vue par la main parce que django est livré avec eux et ils sont appelés générique vues.
Par exemple, l'contribué supprimer la vue est le suivant:
Voici comment vous pouvez l'utiliser:
Dans votre
views.py
:Créer le
delete_note.html
modèle, qui a seulement ceci:Dans votre
urls.py
:Maintenant, supposons que vous souhaitez afficher un lien pour supprimer une note, dites dans votre
index.html
:OriginalL'auteur Burhan Khalid
Vous mettre une variable dans l'url:
Alors la fonction de visualisation doit être comme ceci:
OriginalL'auteur adamr
C'est un peu d'un micro-optimisation, mais les réponses données déjà deux appels de base de données, alors que vous pouvez le faire en un:
Non, cela n'a aucun sens.
get()
est une opération qui atteint toujours la base de données (commeSELECT...WHERE...
).delete()
est une deuxième opération qui a également des hits de la base de données. Maisfilter(...).delete()
se traduit par un seulDELETE
.Je l'ai juste testé et vous avez raison, merci!
OriginalL'auteur Daniel Roseman
Je pense que code ci-dessous pour résoudre le problème
Urls.py
Views.py
OriginalL'auteur user2873552