2

我想将 OneToOne 字段的自动完成添加到 django-admin

class Banner(models.Model):
    product = models.OneToOneField(Product, null=True)

class BannerAdmin(admin.ModelAdmin):
    form = BannerForm

坚持https://django-autocomplete-light.readthedocs.org/en/stable-2.xx/tutorial.html?highlight=tutorial#tutorial -在所有以下步骤之后发生任何变化(“产品”的相同列表小部件.. .):

我做了什么:

  1. 安装:D
  2. 将“autocomplete_light”添加到 INSTALLED_APPS
  3. 覆盖 admin/base_site.html(使用自定义加载器)
  4. url(r'^autocomplete/', include('autocomplete_light.urls')), 到 urlpatterns
  5. autocomplete_light_registry.py 带有模型Bannersearch_fields=['product'],
  6. 更新模型:
class BannerForm(autocomplete_light.ModelForm):
    class Meta:
        model = Banner
        fields = ['product', 'priority', 'image']
        autocomplete_fields = ['product']

我错过了什么?

4

1 回答 1

3

以下解决了我的问题:

  1. 在 INSTALLED_APPS 中的管理员之前
  INSTALLED_APPS = (
    'autocomplete_light',
    'django.contrib.admin',
  )
  1. autocomplete_light_registry.py
class BannerAutocomplete(autocomplete_light.AutocompleteModelBase):
    model = Banner
    search_fields = ('name',)  # banner_obj.product.name
    choices = Product.objects.all()
    limit_choices = 20

    autocomplete_light.register(
        BannerAutocomplete,
        attrs={
            'placeholder': _(u'имя товара'),
            'data-autocomplete-minimum-characters': 1,
        },
    )
  1. 为表单中的相关字段手动选择自动完成:
class BannerForm(autocomplete_light.ModelForm):
    class Meta:
        model = Banner
        fields = ['product', 'priority', 'image']
        autocomplete_names = {'product': 'BannerAutocomplete'}
于 2015-06-11T07:41:06.610 回答