django: Error extraño en el campo relacionado con el reverso

Este es mi modelo

class UserAward(models.Model):
    user = models.ForeignKey(User, related_name='awards')
    award = models.CharField(max_length=255)
    week = models.SmallIntegerField(default=0)
    year = models.IntegerField(default=0)
    points_gained = models.IntegerField(default=0)
    timestamp = models.DateTimeField(auto_now=True)

y cuando doy esto:

users = User.objects.filter (awards__award = 'subir de nivel', awards__week = prev_wk, awards__year = año_previo) .order_by ('- profiles__level')

Me sale este error:

El campo relacionado tiene una búsqueda no válida: año

Si elimino el filtro filter (awards__year = prev_year) la consulta funciona bien.

¿Dónde está el problema?

0
prev_year es 2012. Prev_year es en realidad el año de la semana anterior. Hará una migración de base de datos, aunque year fue desde el principio
agregado el autor xpanta, fuente
sin una razón especial. Pensé que sería más fácil para mí depurar si tuviera todos los valores separados porque muchos scripts externos se ejecutan semanalmente
agregado el autor xpanta, fuente
¿Hay alguna razón por la que no está utilizando DateField y almacenando el año/semana por separado?
agregado el autor Burhan Khalid, fuente
¿Recientemente ha agregado year al modelo? Tendrá que hacer una migración de la base de datos para asegurarse de que la tabla también tenga esa columna. De lo contrario, ¿cuál es el tipo y el valor de prev_year ?
agregado el autor Simeon Visser, fuente

1 Respuestas

prueba esto:

users = User.objects.filter(awards__award='level up').filter(awards__week=prev_wk).filter(awards__year__exact=prev_year).order_by('-profiles__level')

básicamente, django usa __ year para extraer el campo del año de los objetos de fecha que pensó que quería el año de ese campo

3
agregado