【问题标题】:Django admin - How can I add the green plus sign for Many-to-many Field in custom admin formDjango admin - 如何在自定义管理表单中为多对多字段添加绿色加号
【发布时间】:2011-04-11 04:56:40
【问题描述】:

当我在表单中定义多选字段(照片)时,用于在管理表单中添加新实例的绿色加号按钮消失了。即,删除带有定义的行 (photos = ...) 会使加号出现。但是,为了使用自定义字段/小部件,我需要弄清楚这一点。

class GalleryForm(ModelForm):

    photos = ModelMultipleChoiceField(queryset=Photo.objects.all(), label="Photos")

    def __init__(self, *args, **kwargs):
        super(GalleryForm, self).__init__(*args, **kwargs)

我查看了 Django 源代码,似乎我必须将我的小部件包装在 RelatedFieldWidgetWrapper 中,但我还没有完全理解它。感谢任何帮助!

【问题讨论】:

    标签: python django django-admin many-to-many


    【解决方案1】:

    是的,你是对的,你必须用django.contrib.admin.widgets.RelatedFieldWidgetWrapper 包装你的小部件,这有点复杂,因为它需要当前管理站点作为初始化参数!也许你会发现这个post 有帮助!

    【讨论】:

      【解决方案2】:

      在 lazerscience 和 post 的帮助下,我得到了以下结果。

      模型管理员:

      class GalleryAdmin(admin.ModelAdmin):
      
          form = GalleryForm
      
          def __init__(self, model, admin_site):
              self.form.admin_site = admin_site 
              super(GalleryAdmin, self).__init__(model, admin_site)
      

      还有我的表格:

      class GalleryForm(ModelForm):
      
          photos = ThumbnailChoiceField(queryset=Photo.objects.all(), label='Photos', widget=MyWidget(), required=False)
      
          def __init__(self, *args, **kwargs):
              super(GalleryForm, self).__init__(*args, **kwargs)
              rel = ManyToOneRel(self.instance.photos.model, 'id') 
              self.fields['photos'].widget = RelatedFieldWidgetWrapper(self.fields['photos'].widget, rel, self.admin_site) 
      

      【讨论】:

      • 在 Django 1.2 中会引发一个异常,指出表单没有 admin_site 属性。我做错了吗?
      • @orokusaki 有点太晚了(比如 7 年后),但你可以试试:from django.contrib.admin import site as admin_site 如所见 here
      • 感谢 Reimund 的回复,我一直在努力想出这个问题,您的回答对我很有帮助。但现在我的问题是弹出窗口正在替换当前 URL,并且无法在弹出窗口中打开。我该怎么办?
      猜你喜欢
      • 2018-01-16
      • 2013-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      • 2021-06-01
      • 2020-01-10
      • 1970-01-01
      相关资源
      最近更新 更多