【问题标题】:Django formfield_for_foreignkeyDjango formfield_for_foreignkey
【发布时间】:2014-12-25 19:31:19
【问题描述】:

我正在尝试在 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 个)。它传递了 3 次相同的 db_field。

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

【问题讨论】:

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


    【解决方案1】:

    我不太确定发生了什么,但我有两个工具可以为您指明方向:

    1. IPython嵌入

      from IPython import embed
      ... lots of code ...
      embed()
      

    您运行开发服务器的 shell 将放入您 embed() 的 IPython 中,以便您可以探索堆栈

    1. traceback模块

      import traceback
      ... lots of code ....
      traceback.print_stack()
      

    这将打印出堆栈,以便您区分 3 个调用。

    【讨论】:

    • 我尝试比较调用之间的差异,但一切似乎都完全相同(比较每个参数)
    • 我可以在周末看看这个并报告。
    猜你喜欢
    • 2014-02-15
    • 2011-06-04
    • 2021-11-26
    • 1970-01-01
    • 2013-07-12
    • 2012-01-15
    • 2015-08-07
    • 2014-08-30
    • 1970-01-01
    相关资源
    最近更新 更多