2011-06-19 15 views
7

tengo los siguientes modelosDjango: relacionadas con el campo de búsqueda no válido tiene

class SchoolClass(models.Model): 
    id = models.AutoField(primary_key = True) 
    class_name = models.TextField() 
    level = models.IntegerField() 
    taught_by = models.ManyToManyField(User,related_name="teacher_teaching",through='TeachSubject') 
    attended_by = models.ManyToManyField(User,related_name='student_attending',through='StudentClassHistory') 

    def __unicode__(self): 
     return self.class_name 
    class Meta: 
     db_table = 'classes' 

class StudentClassHistory(models.Model): 
    student = models.ForeignKey(User) 
    year = models.IntegerField(default=datetime.date.today().year) 
    semester = models.IntegerField() 
    attended_class = models.ForeignKey(SchoolClass) 

    class Meta: 
     db_table = 'student_class_history' 

Cuando trato de ejecutar la siguiente consulta

User.objects.filter(student_attending__studentclasshistory__year=2011) 

tengo el error Related Field has invalid lookup: year. Eso es extraño, porque omití el año y los campos disponibles son Cannot resolve keyword '' into field. Choices are: attended_class, id, semester, student, year

¿Cómo es esto?

Además, con through en mi atributo de modelo, ¿puedo simplemente eliminar related_name?

Respuesta

23

El problema es que year is a field lookup, por lo que Django cree que está tratando de extraer el año de algo que no es una fecha. Usted debe escribir:

User.objects.filter(student_attending__studentclasshistory__year__exact=2011) 

(También, usted debe hacer el default para year un exigible, es decir .:

year = models.IntegerField(default=lambda: datetime.date.today().year) 

)

+0

bahh, que lo explica. Gracias. otro qns: si escribo filter (student_attending__schoolclasshistory = ...) obtengo un término repetido en mi consulta, es decir, proporcional al número de entradas en schoolclasshistory. sin embargo, el filtro (schoolclasshistory = ..) es bueno. ¿por qué esto es tan? – goh

Cuestiones relacionadas