Django "Поиск, который охватывает отношения" Ошибка - PullRequest
1 голос
/ 20 июня 2011

Я пытаюсь следовать документации по поискам, которые охватывают отношения для "обратного" отношения, найденного здесь .Вот мой код модели:

class Foo(models.Model):
    initiator = models.ForeignKey(User)
    date_time = models.DateTimeField()
    ...

А вот мой код запроса:

...   
now = datetime.now()
users = User.objects.filter(foo__date_time__gte = now)
...

Это приводит к следующей ошибке: django.core.exceptions.FieldError: Cannotразрешить ключевое слово «foo» в поле.Доступны следующие варианты: _message_set, date_joined, электронная почта, first_name, groups, id, is_active, is_staff, is_superuser, last_login, last_name, logentry, пароль, user_permissions, username

Однако, если я изменю код на неиспользуйте User, но вместо этого используйте мою собственную модель типа Bar, тогда все работает так, как я ожидаю, без ошибок.Пример ниже:

class Foo(models.Model):
    initiator = models.ForeignKey(Bar)
    date_time = models.DateTimeField()
    ...

...   
now = datetime.now()
bars = Bar.objects.filter(foo__date_time__gte = now)
...

Может кто-нибудь объяснить мне проблему с первым кодом, который использует модель User в качестве внешнего ключа?Заранее спасибо!

РЕДАКТИРОВАТЬ: Я должен уточнить, что мой код запроса находится не в функции представления, а в служебной функции, которую я вызываю с помощью команды manage.py.Если я добавлю код запроса в представление, то все будет работать без ошибок!Но любопытно, что второй пример кода прекрасно работает как в сценариях вида, так и в сценариях команд управления.

Надеюсь, кто-то с немного большим опытом в Django, чем я, сможет это объяснить.Спасибо!

1 Ответ

3 голосов
/ 21 июня 2011

Хорошо, проблема решена!Это кажется невероятно мелкой деталью, которая привела к этой проблеме, и я не могу сказать, что я полностью понимаю, почему это проявилось так, как это произошло, но здесь говорится:

У меня было from django.contrib.auth.admin import UserAdmin в верхней части моих моделей.py, наряду с моими другими утверждениями импорта.На самом деле это было перенесено до того, как я реорганизовал свои админские ресурсы в собственный admin.py, поэтому импорт UserAdmin вообще не использовался в models.py.Я закомментировал это неиспользуемое утверждение, затем сделал syncdb и получил ошибку проверки модели для конфликтующего имени обратного запроса (это было в поле ForeignKey в моей модели профиля пользователя, но не в модели, которую я не мог запросить в исходном вопросе).).Поэтому я добавил в это поле аргумент related_name, выполнил syncdb, выполнил исходный запрос, который ранее выдавал ошибки, и все работало без ошибок!

Так что в итоге он перешел к ошибочному from django.contrib.auth.admin import UserAdmin.

Спасибо всем, кто откликнулся, пытаясь помочь!

...