gpt4 book ai didi

python - 如何在 Django 管理中显示 ManyToMany 关系的 raw_id 值?

转载 作者:太空狗 更新时间:2023-10-30 00:42:04 27 4
gpt4 key购买 nike

我有一个在 ForeignKeyField 和 ManyToManyField 上使用 raw_id 的应用程序。管理员在编辑框右侧显示外键的值。

不幸的是,它不适用于 ManyToMany。我检查了代码,我认为这是正常行为。但是我想知道是否有人有简单的提示来改变这种行为?

提前致谢

更新:我尝试将 ManyToManyRawIdWidget 子类化,但我不知道如何说 raw_id_fields 应该使用我的自定义小部件。 formfield_overrides 似乎不适用于 raw_id 字段

最佳答案

最后我成功让它工作了。这里是更新后的Django2.0版本

from django.contrib.admin.widgets import ManyToManyRawIdWidget
from django.utils.encoding import smart_str
from django.urls import reverse
from django.utils.html import escape, mark_safe


class VerboseManyToManyRawIdWidget(ManyToManyRawIdWidget):
"""
A Widget for displaying ManyToMany ids in the "raw_id" interface rather
than in a <select multiple> box. Display user-friendly value like the ForeignKeyRawId widget
"""

def __init__(self, remote_field, attrs=None, *args, **kwargs):
super().__init__(remote_field, attrs, *args, **kwargs)

def label_and_url_for_value(self, value):
values = value
str_values = []
field = self.rel.get_related_field()
key = field.name
fk_model = self.rel.model
app_label = fk_model._meta.app_label
class_name = fk_model._meta.object_name.lower()
for the_value in values:
try:
obj = fk_model._default_manager.using(self.db).get(**{key: the_value})
url = reverse('admin:{0}_{1}_change'.format(app_label, class_name), args=[obj.id])
label = escape(smart_str(obj))
elt = '<a href="{0}" {1}>{2}</a>'.format(
url,
'onclick="return showAddAnotherPopup(this);" target="_blank"',
label
)
str_values += [elt]
except fk_model.DoesNotExist:
str_values += [u'???']
return mark_safe(', '.join(str_values)), ''


class MyAdmin(admin.ModelAdmin):
...
def formfield_for_dbfield(self, db_field, **kwargs):
if db_field.name in ('groups', ):
kwargs['widget'] = VerboseManyToManyRawIdWidget(db_field.remote_field, self.admin_site)
else:
return super().formfield_for_dbfield(db_field, **kwargs)
kwargs.pop('request')
return db_field.formfield(**kwargs)

不幸的是,我白花了赏金 ;-)

更新:此代码段现在与 Django 2.0 兼容。另见 http://djangosnippets.org/snippets/2108/

关于python - 如何在 Django 管理中显示 ManyToMany 关系的 raw_id 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2809122/

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