[英]Django: ManyToMany widget won't be displayed as double list
嗨,Stackoverflow人们,
我想改变M2M部件的管理页面(后来在实际Django的网站),以更人性化的双列表(像这样的一个 )。
我了解django.contrib.admin.widgets.FilteredSelectMultiple可以为我做到这一点。 但是,我很难使其正常工作。 我已将以下代码添加到admin.py中,但是当我在admin应用中查看模型时,小部件没有更改。
我试图从这里采用代码。 每个SupplierProfile应该通过WorldBorder模型连接到一个或多个国家(基于GeoDjango示例 )
代码的缺陷在哪里? 我看不到为什么它不会显示。 谢谢您的帮助!
from django import forms
from django.contrib.admin.widgets import FilteredSelectMultiple
from django.contrib.gis import admin
from django.utils.translation import ugettext_lazy as _
from apps.profile.models import (UserProfile,
SupplierProfile)
from apps.gis_data.models import WorldBorder
class WorldBorderAdmin(admin.ModelAdmin):
filter_horizonal = ('name',)
class SupplierProfileAdminForm(forms.ModelForm):
distribution_location_country = forms.ModelMultipleChoiceField(
queryset = WorldBorder.objects.all(),
required = False,
widget = FilteredSelectMultiple(
verbose_name = _('Distribution Country'),
is_stacked=False
)
)
class Meta:
model = SupplierProfile
def __init__(self, *args, **kwargs):
super(SupplierProfileAdminForm, self).__init__(*args, **kwargs)
if self.instance:
self.fields['distribution_location_country'].initial = self.instance.distribution_location_country.all()
def save(self, commit=True):
profile = super(SupplierProfileAdminForm, self).save(commit=False)
profile.distribution_location_country = self.cleaned_data['distribution_location_country']
if commit:
profile.save()
profile.save_m2m()
return profile
class SupplierProfileAdmin(admin.ModelAdmin):
form = SupplierProfileAdminForm
admin.site.register(SupplierProfile, admin.OSMGeoAdmin)
更新的admin.py代码
是否可以如下所述定义重复列表? “ distribution_location_country”是我的SupplierProfile中的m2m字段。 由于某种原因,它仍然没有实现。
from django import forms
from django.contrib.admin.widgets import FilteredSelectMultiple
from django.contrib.gis import admin
class SupplierProfileAdmin(admin.OSMGeoAdmin):
filter_horizontal = ('distribution_location_country', )
admin.site.register(SupplierProfile, SupplierProfileAdmin)
您的register
行似乎是错误的:
admin.site.register(SupplierProfile, admin.OSMGeoAdmin)
不会在模型中注册您自定义的SupplierProfileAdmin
。
也许您希望SupplierProfileAdmin
的基类是OSMGeoAdmin
而不是ModelAdmin
:
class SupplierProfileAdmin(admin.OSMGeoAdmin):
form = SupplierProfileAdminForm
和您的注册行是
admin.site.register(SupplierProfile, SupplierProfileAdmin)
另外,我对此不确定,但是您也许可以使用
filter_horizonal = ('name_of_the_m2m_field_on_the_model', )
在您的SupplierProfileModel
而不是表格上的该自定义字段上?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.