这种情况在我的项目中发生得太频繁了:
Foo,它有几个ForeignKey字段,其中一个要引用模型BarBar有数百万实例Foo的管理页面;Django试图一次检索所有Bar(将它们显示在组合框中),服务器就会重载。Foo的管理并将bar添加到raw_id_fields中,这个问题得到了解决。我想防止这种情况在未来发生,最好是以某种方式(一劳永逸地)声明Bar有许多行,并且应该始终将其视为引用它的字段在所有管理页中都在raw_id_fields中列出。这有可能吗?
发布于 2019-12-11 19:58:04
这是一个极好的观点。这是一个关键的问题,可以关闭数据库甚至web服务器。
考虑到这一点,我认为默认的方法必须是raw_id_fields。如果你知道你在做什么,那么你就改变了这种行为。
不幸的是,管理接口库的大多数作者都不同意这种想法。不仅仅是Python,还有Rails等其他社区。
5年前,我厌倦了有同样的问题,然后我开发了django-智能-自动寄存器,它可以做到这一点,并使用另一个好的模式自动配置。即使今天我也面临着这个问题,所以我想值得一看。
ps:这个库最初是使用模块化方法实现的,尽管您只调用了一些根据模型字段为您配置raw_id_fields的函数。
发布于 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
将此添加到项目文件中的某个位置。
from django.forms import ModelChoiceField
from django.contrib.admin.widgets import ForeignKeyRawIdWidget
ModelChoiceField.widget = ForeignKeyRawIdWidget缺点:这种情况也会发生在非管理表单上。
https://stackoverflow.com/questions/24404362
复制相似问题