首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Django管理中,总是像对待ForeignKey字段一样对待raw_id_fields字段

在Django管理中,总是像对待ForeignKey字段一样对待raw_id_fields字段
EN

Stack Overflow用户
提问于 2014-06-25 09:00:15
回答 2查看 1.1K关注 0票数 9

这种情况在我的项目中发生得太频繁了:

  • 有人添加了一个模型Foo,它有几个ForeignKey字段,其中一个要引用模型Bar
  • 为该模型添加了一个管理程序(并且工作正常)
  • 代码被部署。
  • 在生产服务器上,Bar有数百万实例
  • 有人访问Foo的管理页面;Django试图一次检索所有Bar(将它们显示在组合框中),服务器就会重载。
  • 后来,通过编辑Foo的管理并将bar添加到raw_id_fields中,这个问题得到了解决。

我想防止这种情况在未来发生,最好是以某种方式(一劳永逸地)声明Bar有许多行,并且应该始终将其视为引用它的字段在所有管理页中都在raw_id_fields中列出。这有可能吗?

EN

回答 2

Stack Overflow用户

发布于 2019-12-11 19:58:04

这是一个极好的观点。这是一个关键的问题,可以关闭数据库甚至web服务器。

考虑到这一点,我认为默认的方法必须是raw_id_fields。如果你知道你在做什么,那么你就改变了这种行为。

不幸的是,管理接口库的大多数作者都不同意这种想法。不仅仅是Python,还有Rails等其他社区。

5年前,我厌倦了有同样的问题,然后我开发了django-智能-自动寄存器,它可以做到这一点,并使用另一个好的模式自动配置。即使今天我也面临着这个问题,所以我想值得一看。

ps:这个库最初是使用模块化方法实现的,尽管您只调用了一些根据模型字段为您配置raw_id_fields的函数。

票数 1
EN

Stack Overflow用户

发布于 2014-06-25 15:07:20

从医生那里:

ForeignKey由django.forms.ModelChoiceField表示,它是一个ChoiceField,它的选择是一个模型QuerySet。

ModelChoiceField扩展字段,并为此具有一个小部件属性,可被滥用https://github.com/django/django/blob/master/django/forms/fields.py#L49

将此添加到项目文件中的某个位置。

代码语言:javascript
复制
from django.forms import ModelChoiceField
from django.contrib.admin.widgets import ForeignKeyRawIdWidget
ModelChoiceField.widget = ForeignKeyRawIdWidget

缺点:这种情况也会发生在非管理表单上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24404362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档