gpt4 book ai didi

django - 模型形式的 raw_id_fields

转载 作者:行者123 更新时间:2023-12-03 21:09:27 26 4
gpt4 key购买 nike

我有一个模型表单,它有一个字段,该字段是一个作为 40,000 行的模型的外键值。默认模型表单尝试创建一个包含 40,000 个选项的选择框,至少可以说这并不理想。当这个模型表单用于表单集工厂时更是如此!

在管理员中,这可以通过使用“raw_id_fields”轻松避免,但似乎没有等效的模型形式。我怎样才能做到这一点?

这是我的模型:

class OpBaseForm(ModelForm):

base = forms.CharField()

class Meta:
model = OpBase
exclude = ['operation', 'routes']
extra = 0
raw_id_fields = ('base', ) #does nothing

第一条粗体行的工作原理是不创建巨大的笨拙的选择框,但是当我尝试保存此表单的字段集时,出现错误: “OpBase.base”必须是“Base”实例。 为了保存模型表单,'base' 需要是一个 Base 实例。显然,Base 主键的字符串表示是不够的(至少不是自动的)。我需要某种机制来将给定表单的字符串更改为 Base 实例。而且这种机制必须在一个表单集中工作。有任何想法吗?如果只是 raw_id_fields会起作用,这就像蛋糕一样容易。但据我所知,它仅在管理员中可用。

最佳答案

您还可以使用整个 raw_id_field 管理小部件,完成管理页面具有的方便的 js 弹出搜索。您甚至不需要模型表格。就是这样:

import string
from django.contrib.admin.widgets import ForeignKeyRawIdWidget
from django import forms
from models import MyModel

# Have to subclass widget b/c
# django hardcodes a relative path to Admin Root URL: ../../..
class HardcodedURLForeignKeyRawIdWidget(ForeignKeyRawIdWidget):
def render(self, *args, **kwargs):
original_render = super(HardcodedURLForeignKeyRawIdWidget,
self).render(*args, **kwargs)
ADMIN_ROOT_URL = "/admin/"
return string.replace(original_render,"../../../", ADMIN_ROOT_URL)


class FieldLookupForm(forms.Form):
my_foreignkey_field = forms.CharField(max_length=10,
widget=HardcodedURLForeignKeyRawIdWidget(
MyModel._meta.get_field("foreignkey_field").rel))

将相关的 admin js 添加到您的模板中,然后中提琴
{% block header %}
<script type="text/javascript">window.__admin_media_prefix__ = "/static/admin/";</script>
<script type="text/javascript" src="/admin/jsi18n/"></script>
<script type="text/javascript" src="/static/admin/js/core.js"></script>
<script type="text/javascript" src="/static/admin/js/admin/RelatedObjectLookups.js"></script>
<script type="text/javascript" src="/static/admin/js/jquery.min.js"></script>
<script type="text/javascript" src="/static/admin/js/jquery.init.js"></script>
<script type="text/javascript" src="/static/admin/js/actions.min.js"></script>
{% endblock %}

关于django - 模型形式的 raw_id_fields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/980405/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com