【问题标题】:Django: Search many to many field while creating objectDjango:在创建对象时搜索多对多字段
【发布时间】:2018-12-19 02:43:30
【问题描述】:

我有一个用例,我有多个 Ingredient,可以通过 Django 管理员链接到 Recipe。现在我有大约一百种成分,这使得在以下 UI 中选择成分变得非常困难。

有没有办法添加搜索字段或类似于 django 管理员的内容以便于选择?

【问题讨论】:

    标签: django python-3.x django-models django-admin django-2.0


    【解决方案1】:

    你的选择很少。

    1。 filter_horizontal

    使用 filter_horizo​​ntal,您可以在管理中使用水平 m2m ui。我更喜欢在管理员中使用 m2m 的这种方式。

    class YourAdmin(admin.ModelAdmin):
        filter_horizontal = ('m2m_field',)
        ...
    

    结果将是……

    2。 raw_id_fieldsdocs

    您可以使用raw_id_fields 在您的 m2m 字段中使用弹出模式。

    当你有很多 m2m 字段时,它有点有用。此外,过滤要添加的 m2m obj 也很容易。

    class YourAdmin(admin.ModelAdmin):
        raw_id_fiedls = ('m2m_field',)
        ...
    

    【讨论】:

      【解决方案2】:

      我想你想过滤成分并在管理界面上一一选择

      您可以使用内置的 django 表单 CheckboxSelectMultiple 小部件代替 SelectMultiple 以方便选择

      from django import forms
      from django.contrib import admin
      
      class RecipeForm(forms.ModelForm):
      
          class Meta(object):
              model = Recipe
              widgets = {
                  'Ingredient': forms.CheckboxSelectMultiple,
              }
      
      
      class RecipeAdmin(admin.ModelAdmin):
      
          form = RecipeForm
      
      admin.site.register(Recipe, RecipeAdmin)
      

      或者,您可以使用django-better-filter-widget 如果你想要一个关于选项的搜索输入,请参考 Github repo for 安装

      它是一个自定义小部件,通过覆盖 SelectMultiple 小部件创建 Django 表单

      from django import forms
      from django.contrib import admin
      from better_filter_widget import BetterFilterWidget
      
      class RecipeForm(forms.ModelForm):
      
          class Meta(object):
              model = Recipe
              widgets = {
                  'Ingredient': BetterFilterWidget(),
              }
      
      
      class RecipeAdmin(admin.ModelAdmin):
          form = RecipeForm
      
      admin.site.register(Recipe, RecipeAdmin)
      

      【讨论】:

      • BetterFilterWidget 可以在管理员之外以“正常”形式使用吗?
      猜你喜欢
      • 2021-04-30
      • 2018-08-09
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多