Django formfield_for_foreignkey

时间:2014-10-29 22:03:38

标签: python django django-admin django-1.7 django-modeladmin

我正在尝试在documentation之后的外键字段中过滤我的管理员选择。

我的模型非常简单:

class Page(models.Model):
    title = models.CharField(max_length=50, null=False, blank=False, default="Title")
    layout = models.ForeignKey(Layout, null=False) #This sets the layout for the current page

要实现这一点,我应该做一些事情:

class PageAdmin(admin.ModelAdmin):

    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "layout":
            kwargs["queryset"] = Template.objects.get_a_queryset()
        return super(PageAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

它正在工作,但每次访问页面时它都会通过该功能3次,共提供5个查询(默认情况下为3次加2次)。它传递相同db_field的3倍。

如何将其减少到只有1个查询?这是一个预期的行为,如果是这样......为什么?

1 个答案:

答案 0 :(得分:0)

我不太清楚发生了什么,但我有两种工具可以指明你的方向:

  1. IPython嵌入

    from IPython import embed
    ... lots of code ...
    embed()
    
  2. 运行dev服务器的shell将进入你嵌入()的IPython,以便你可以探索堆栈

    1. traceback模块

      import traceback
      ... lots of code ....
      traceback.print_stack()
      
    2. 这将打印出堆栈,以便您区分3次调用。