Un ejemplo es mejor que mil palabras:Problema Django QuerySet .defer() - ¿error o característica?
In [3]: User.objects.filter(id=19)[0] == User.objects.filter(id=19)[0]
Out[3]: True
In [4]: User.objects.filter(id=19)[0] == User.objects.filter(id=19).defer('email')[0]
Out[4]: False
él trabaja como esto a propósito?
Subestación: ¿hay alguna manera simple de obtener una instancia de modelo regular de la diferida?
EDIT:
Parece que ContentTypes marco está parcheado apropiada: http://code.djangoproject.com/changeset/10523
, así que diría que el modelo ._____ eq _____() operador no debe verse como this:
def __eq__(self, other):
return isinstance(other, self.__class__) and self._get_pk_val() == other._get_pk_val()
pero más como este:
def __eq__(self, other):
return ContentType.objects.get_for_model(self) is ContentType.objects.get_for_model(other) and self._get_pk_val() == other._get_pk_val()
Esto, por supuesto, causa dos hits DB por primera vez, pero afortunadamente get_for_model parece implementar el caché.
Respuesta actualizada ... – FallenAngel
Por si acaso alguien más se tropieza con esto, aparentemente esto era de hecho un error de Django que debería ser [reparado en 1.7] (https://code.djangoproject.com/ticket/24772) –