Django QuerySet .defer () проблема - ошибка или функция?

Пример лучше, чем тысяча слов:

   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

Работает ли он так намеренно?

Вопрос: есть ли простой способ получить экземпляр обычной модели из отложенного?

РЕДАКТИРОВАТЬ:

Похоже, что фреймворк Contenttypes исправлен соответствующим образом: http://code.djangoproject.com/changeset/10523

, поэтому я бы сказал, что оператор Model ._____ eq _____ () должен выглядеть не как , это :

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self._get_pk_val() == other._get_pk_val()

, а больше как this:

    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()

Это, конечно, вызывает два обращения к БД в первый раз, но, к счастью, get_for_model, похоже, реализует кеш.

6
задан Tomasz Zieliński 1 September 2010 в 14:58
поделиться