В приложении django у меня есть модели для Word (для изучения), Student (для изучения) и StudentWord - это таблица для обработки отношения многие ко многим:
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)
У меня это работало, но я хотел добавить функцию, чтобы приложение узнало, когда будет следующая дата, чтобы спросить студента об этом слове. Для этого я добавил поле nextdate в модель StudentWord, удалил таблицу ученических слов в MySQL, использовал syncdb для ее регенерации и использовал страницу администратора, чтобы успешно добавить несколько ученических слов (с новым полем для даты в нем).
Однако следующая часть представления генерирует ошибку:
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())
Ошибка:
Exception Type: NameError
Exception Value:
global name 'studentword__nextdate' is not defined
Exception Location: /home/wordcode/words/vocabulary/views.py in index, line 32
Строка 32 - последняя строка фрагмента из вышеприведенного представления. Когда я удаляю этот фильтр, ошибка исчезает, поэтому, похоже, она связана с новым полем. Я использовал:
дата импорта время
... и я могу без проблем использовать datetime.date.today () в другом месте кода.
Я предположил, что каким-то образом он не обнаружил новое добавленное поле, но, поскольку администраторский сайт понимает, что он есть, это маловероятно, и в любом случае удаление таблицы Studentword и воссоздание ее должно сделать трюк.
Любая помощь или совет приветствуется.