django: Erro estranho no campo relacionado ao inverso

Este é o meu 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)

e quando eu dou isto:

users = User.objects.filter (awards__award = 'subir de nível', awards__week = prev_wk, awards__ ano = prev_year) .order_by ('- profiles__level')

Eu recebo este erro:

O campo relacionado tem pesquisa inválida: ano

Se eu remover a consulta filter (awards__year = prev_year) funciona bem.

Onde está o problema?

0
adicionado editado
Visualizações: 1
prev_year é 2012. Prev_year é realmente o ano da semana anterior. Fará uma migração de banco de dados, embora ano tenha sido desde o início
adicionado o autor xpanta, fonte
sem motivo especial. Pensei que seria mais fácil depurar se eu tivesse todos os valores separados porque muitos scripts externos são executados semanalmente
adicionado o autor xpanta, fonte
Existe uma razão pela qual você não está usando o DateField e armazenando o ano/semana separadamente?
adicionado o autor Burhan Khalid, fonte
Você adicionou recentemente year ao modelo? Você precisará fazer uma migração de banco de dados para garantir que a tabela também tenha essa coluna. Caso contrário, qual é o tipo e valor de prev_year ?
adicionado o autor Simeon Visser, fonte

1 Respostas

tente isto:

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

Basicamente, o django usa __ year para extrair o campo ano dos objetos de data que você queria que o ano desse campo

3
adicionado