Django 表单字段外键

0 投票
1 回答
1575 浏览
提问于 2025-04-30 11:51

我正在尝试根据文档来过滤我在外键字段中的管理员选项。

我的模型非常简单:

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次。

我该如何把这个查询减少到只进行1次呢?这是预期的行为吗?如果是的话...为什么会这样呢?

暂无标签

1 个回答

0

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

  1. IPython 嵌入

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

你在运行开发服务器的命令行中会进入到 IPython 环境,这样你就可以使用 embed() 来查看调用栈。

  1. traceback 模块

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

这个模块会打印出调用栈的信息,这样你就能区分出三次调用的情况。

撰写回答