Django:在基于类的视图中更正select_related

时间:2012-08-19 06:53:16

标签: django django-models foreign-keys django-class-based-views django-select-related

嗨Stackoverflow人,

我在Django中遇到一个与select_related查询有关的奇怪问题。我安装了django-cities app,其中列出了大量城市的地理信息。 在我的项目模型中,我为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仍然从数据库中提取无数的外键。记录器显示无限数量的以下请求。

  

...   DEBUG(0.000)SELECT" cities_region"。" id"," cities_region"。" name",   " cities_region"。" slug"," cities_region"。" name_std",   " cities_region"。"代码"," cities_region"。" country_id"从   " cities_region"在哪里" cities_region"。" id" = 3861887; ARGS =(3861887)   DEBUG(0.000)SELECT" cities_country"。" id"," cities_country"。" name",   " cities_country"。" slug"," cities_country"。" code",   " cities_country"。"人口"," cities_country"。"大陆",   " cities_country"" TLD"来自" cities_country"哪里   " cities_country"" ID" = 3865483; args =(3865483,)D   ...

如何在执行ProjectCreate类时强制选择相关方法?

感谢您的帮助和建议!

1 个答案:

答案 0 :(得分:1)

在没有任何测试的情况下,您是否尝试重写get_queryset方法而不是使用queryset属性?至少你会对异常捕捉和其他技术更加灵活。