Привет, люди из Stackoverflow,
Я хотел бы изменить виджет m2m на страницах администратора (а позже и на реальном сайте django) на более удобный для пользователя двойной список (например, one * 1004).*).
Я понимаю, что django.contrib.admin.widgets.FilteredSelectMultiple может сделать это для меня.Однако у меня проблемы с тем, чтобы заставить его работать.Я добавил код ниже в мой admin.py, но виджет не меняется, когда я просматриваю модель в приложении администратора.
Я пытался перенести код из здесь .Каждый 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» - это поле 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)