Django: l'Enregistrement de DB à partir d'un exemple de formulaire
Il semble que j'ai eu de la difficulté à trouver une bonne source/tutoriel à propos de l'enregistrement des données dans la DB à partir d'un formulaire. Et à mesure qu'il progresse, je suis en train de se perdre. Je suis nouveau sur Django, et s'il vous plaît me guider. Je suis d'erreur
variable locale 'store' référencé avant affectation
Voici mes codes,
models.py
from django.db import models
# Create your models here.
class Store(models.Model):
store_name = models.CharField(max_length=100)
def __unicode__(self):
return self.store_name
class Feedback(models.Model):
store = models.ForeignKey(Store)
username = models.CharField(max_length=100)
comment = models.CharField(max_length=1000)
date = models.DateTimeField("comment_date")
def __unicode__(self):
return self.username
views.py
def add(request, store_name):
if request.method == "POST":
store = Store.objects.get(store_name=store_name)
saved_username = request.POST.get("username", "")
saved_feedback = request.POST.get("feedback", "")
feedback = Feedback(username=saved_username, comment=saved_feedback, date=timezone.now())
feedback.save()
return HttpResponseRedirect(reverse("view", args=(store.id,)))
addfeedback.html(celui qui appelle ajouter dans views.py)
<html>
<head><title>Add Feedback</title>
<link rel="stylesheet" type="text/css" href={{ STATIC_URL }}styles.css>
</head>
<body>
<div class="form">
<form action="{% url add store.store_name %}" method="post">
{% csrf_token %}
<input type="text" name="username" size="20"><br />
<textarea name="feedback" cols="50" rows="10"></textarea><br />
<input type="submit" value="Add" />
</form>
</body>
</html>
2 ans plus tard et j'ai ce problème aussi
2 ans plus tard et j'ai oublié que diable ai-je demandé.
2 ans plus tard et j'ai oublié que diable ai-je demandé.
OriginalL'auteur Law Gimenez | 2012-12-03
Vous devez vous connecter pour publier un commentaire.
Utilisation
django.forms
pour le travail. Ne mettez pas de données directement à partir dePOST
db. Reportez-vous à la la documentation.L'erreur est évidente – vous faites référence à
store
même si la demande n'est pasPOST
.OriginalL'auteur Krzysztof Szularz
Voici une bien jolie tutoriel sur la ModelForms. Même si c'est pour Django 1.3, il est donc en train de devenir obsolète.
Vous ne devriez recevoir le
local variable 'store' referenced before assignment
erreur lorsque vous accédez au formulaire de soumission de l'url directement. Si un formulaire a été posté à l'adresse url, le magasin doit être attribué.Vous êtes en train de créer un formulaire basé sur un modèle, je vais vous expliquer comment vous pouvez utiliser un ModelForm.
Vos commentaires modèle a un DateTimeField et stocker la date et l'heure lorsque le retour a été soumis. Vous pouvez automatiser ce par la mise en
auto_now_add
à vraiPuis créer un forms.py dans votre dossier app avec le suivant
Votre views.py doit contenir une fonction qui affiche les processus et le formulaire soumis
Désolé je l'ai eu en arrière, c'est
auto_now_add
J'ai juste transféré store = Magasin.objets.get(store_name=store_name) cette ligne vers le haut. Et tout s'est bien passé. Merci.
OriginalL'auteur Enrico
J'ai eu le même problème de chargement de l'enregistrement des données dans ma base de données. C'est comment je l'ai résolu.
OriginalL'auteur Richard Ackon