2014-06-05 6 views
0

J'essaie de faire une chose très simple dans Django mais je suis bloqué depuis que je suis un débutant. Fondamentalement, sur une page de médecin dans mon site Web, j'essaie d'ajouter un champ où un utilisateur peut entrer le temps d'attente pour ce médecin. Pour cela, je l'ai écrit le modèle suivant dans mon models.py:Django: modèles, vues et gabarits

class WaitingTime(models.Model): 
    doctor = models.ForeignKey(Doctor) 
    user = models.OneToOneField(User, unique=True) 
    time = models.IntegerField("Waiting Time", max_length=2) 

Après cela, je l'ai écrit la vue suivante:

def WaitingTime(request): 
    if request.method == 'POST': 
     form = WaitingTime(request.POST) 
     if form.is_valid(): 
      doctor = form.cleaned_data['doctor'] 
      user = form.cleaned_data['user'] 
      time = form.cleaned_data['time'] 
      return HttpResponseRedirect('/thanks/') 
    else: 
     form = WaitingTime() 

Ce point de vue est la partie que je suis le plus incertain au sujet. Même si j'ai fait 2 tutoriels, je me sens comme un noob total quand je dois écrire cette vue.

Et puis, j'ai ajouté ce code à mon modèle:

<h4>Please enter the waiting time that you experienced for this doctor.</h4> 
<form action="/WaitingTime/" method="post">{% csrf_token %} 
{{ form.as_p }} 
<input type="hidden" name="doctor" value="{{ doctor.name }}" /> 
<input type="hidden" name="user" value="{{ user.username }}" /> 
WaitingTime: <input type="text" name="time"><br> 
<input type="submit" value="Submit" /> 
</form> 

Donc, fondamentalement, je ne parviens pas à ajouter des données de l'extrémité avant à ma base de données, quelque chose de très trivial et de base. J'ai déjà exécuté python manage.py syncdb et vérifié en utilisant le navigateur de base de données SQLite. Le tableau avec les colonnes appropriées a été ajouté. S'il vous plaît aider. Merci beaucoup d'avance.

Répondre

4

Afin d'apporter des modifications à la base de données de vos points de vue doit être changé à -

def WaitingTime(request): 
    if request.method == 'POST': 
     form = WaitingTimeForm(request.POST) #class specified in forms.py 
     if form.is_valid(): 
      doctor = form.cleaned_data['doctor'] 
      user = form.cleaned_data['user'] 
      time = form.cleaned_data['time'] 
      WaitingTimeObject = WaitingTime(doctor=doctor, user=user, time=time) 
      WaitingTimeObject.save() 
      return HttpResponseRedirect('/thanks/') 
+0

Merci pour votre réponse. J'ai fait le changement. Cependant, lorsque j'essaie de soumettre les données du formulaire, j'obtiens une erreur qui indique "AttributeError at/WaitingTime/ L'objet 'WaitingTime' n'a pas d'attribut 'get'" – maahd

+0

En effet, les noms de vos modèles et formulaires sont identiques. Je voudrais changer la classe de formulaire en 'WaitingTimeForm()' Aussi, le nom de la vue est le même - conflit à nouveau !! – karthikr

+0

Je pense que @karthir a peut-être résolu votre doute. Avez-vous créé un fichier forms.py? Dans forms.py, assurez-vous que la classe est WaitingTimeForm (vérifiez la modification apportée à la réponse). – JRodDynamite