繁体   English   中英

Django:ManyToMany小部件不会显示为双重列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM