我想改變在管理頁面的M2M部件(後來在實際Django的網站)的用戶更友好雙列表(像這樣one)。
據我所知,django.contrib.admin.widgets.FilteredSelectMultiple可以爲我做這個。但是,我無法使其正常工作。我已將下面的代碼添加到我的admin.py中,但在管理應用程序中查看模型時,該小部件不會更改。
我試過採用here的代碼。每個SupplierProfile應連接到一個或多個來自WorldBorder型號的國家(基於GeoDjango example)
代碼中的缺陷在哪裏?我看不出爲什麼它不會顯示。 謝謝你的幫助!
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)
嗨agf,什麼是正確的註冊? - > admin.site.register(SupplierProfile,admin.SupplierProfileAdmin)或 - > admin.site.register(SupplierProfile,SupplierProfileAdmin)?如果我用第一個,我得到以下錯誤:「AttributeError 異常值:v'module'對象沒有屬性'SupplierProfileAdmin'」,第二個解決方案也會引發錯誤。感謝您的幫助! – neurix 2012-04-01 02:16:48
@neurix首先是一個錯字。第二個錯誤是什麼?看起來是正確的。你有沒有嘗試調整基礎班?看我的編輯。 – agf 2012-04-01 02:17:58
謝謝你的幫助!隨着你的文章的變化,我得到新的錯誤「實例需要有一個主鍵值纔可以使用多對多關係」。我曾嘗試過「filter_horizontal」,但它也沒有奏效。會是更好的解決方案。你有沒有想到新的錯誤?我如何分配主鍵? – neurix 2012-04-01 02:26:55