Dans une application django, j'ai des modèles pour un mot (à apprendre), un étudiant (apprentissage), et StudentWord est une table pour gérer le plusieurs à plusieurs:django nouveau champ générant "nom global ... n'est pas défini" erreur
class Word(models.Model):
word = models.CharField(max_length=80)
image = models.ForeignKey(Image)
language = models.ForeignKey(Language)
def __unicode__(self):
return self.word
class Student(models.Model):
username = models.ForeignKey(User)
words = models.ManyToManyField(Word, through='StudentWord')
def __unicode__(self):
return self.username.username
class StudentWord(models.Model):
word = models.ForeignKey(Word)
student = models.ForeignKey(Student)
level = models.IntegerField()
nextdate = models.DateField() <-- this field newly added
learned = models.BooleanField()
def __unicode__(self):
return u'%s %s' % (self.student, self.word)
je l'avais travailler, mais je voulais ajouter une fonction où l'application serait de savoir quand était la prochaine date de demander à l'élève ce mot. Pour cela, j'ai ajouté le champ nextdate au modèle StudentWord, supprimé la table studentword dans MySQL, utilisé syncdb pour le régénérer, et utilisé la page d'administration pour ajouter quelques mots studentwords (avec le nouveau champ pour la date).
Cependant, la partie suivante de l'affichage génère une erreur:
def index(request):
last_question = request.session.get('last_question', 'none')
student_language = request.session.get('student_language', 'english')
student=Student.objects.get(username=request.user)
words_student_knows = Word.objects.filter(studentword__student=student, studentword__learned=True)
words_student_knows.filter(studentword__nextdate<=datetime.date.today())
L'erreur est:
Exception Type: NameError
Exception Value:
global name 'studentword__nextdate' is not defined
Exception Location: /home/wordcode/words/vocabulary/views.py in index, line 32
ligne 32 est la dernière ligne de l'extrait du point de vue ci-dessus. Lorsque je supprime ce filtre, l'erreur disparaît, il semble donc être lié au nouveau champ. J'ai utilisé: Importer datetime ... dans la vue, et je suis capable d'utiliser datetime.date.today() ailleurs dans le code sans problème. Je pense que cela n'a pas été détecté sur le nouveau champ ajouté, mais comme le site admin comprend qu'il est présent, cela ne semble pas probable, et en tout cas, il supprime la table studentword et la recréer devrait faire l'affaire.
Toute aide ou conseil est apprécié.
Exactement, merci! – rossdavidh