Django: исправить select_related в представлении на основе классов

Привет люди Stackru,

У меня странная проблема с запросом select_related в Django. Я установил приложение django-towns, которое отображает геоинформацию для большого количества городов. В моей модели проекта я создал внешний ключ к элементу city для сохранения местоположения в моем models.py.

from cities.models import City 
class Project(models.Model): 
   ...
   city = models.ForeignKey(City, blank = True, null = True)

Из-за большого количества возможных городов я создал запрос в моем представлении на основе классов, который выбирает соответствующее поле города при создании объекта Project.

from django.views.generic.edit import CreateView, UpdateView, DeleteView
from project.models import Project
class ProjectCreate(CreateView):
    queryset = Project.objects.select_related('city__country', 'city__region').all()
    template_name = 'solution/solution_create_form.html'

Однако, когда я запрашиваю класс ProjectCreate, Django по-прежнему извлекает бесконечное количество чужих ключей из базы данных. Регистратор показывает неограниченное количество следующих запросов.

... ОТЛАДКА (0.000) ВЫБРАТЬ "towns_region". "Id", "towns_region". "Name", "towns_region". "Slug", "towns_region". "Name_std", "towns_region". "Code", "towns_region"."country_id" FROM " towns_region "ГДЕ" towns_region"."id" = 3861887; args=(3861887,) DEBUG (0.000) ВЫБРАТЬ "towns_country". "id", "towns_country". "name", "towns_country". "slug", "towns_country". "code", "towns_country". "население", "towns_country". "continent", "towns_country"."tld" FROM "towns_country" ГДЕ "towns_country"."id" = 3865483; args=(3865483,) D ...

Как я могу принудительно вызвать связанный метод выбора при выполнении класса ProjectCreate?

Спасибо за вашу помощь и предложения!

1 ответ

Решение

Без какого-либо тестирования, вы пытались переопределить get_queryset метод вместо использования queryset атрибут? По крайней мере, вы будете более гибкими с ловлей исключений и другими методами.