【问题标题】:django-autocomplete-light foreign key formdjango-autocomplete-light 外键表单
【发布时间】:2016-10-12 13:52:51
【问题描述】:

我已按照 django-autocomplete-light 的教程进行操作 http://django-autocomplete-light.readthedocs.io/en/master/tutorial.html 但我有以下问题。

我有模特

class Order(models.Model):
    client = models.ForeignKey(Client)
    product = ....

如果我按照教程中的说明创建表单

class OrderForm(forms.ModelForm):
    class Meta:
        model = Order
        fields = ('__all__')
        widgets = {
            'client': autocomplete.ModelSelect2(url='ordersapp:client-autocomplete')
    }

在 admin.py 中

class OrderAdmin(admin.ModelAdmin):
    form = OrderForm

我得到了想要的结果,它是为提交的客户自动完成的。

但如果我不想创建表单并改为使用

class OrderAdmin(admin.ModelAdmin):
    .....

有没有办法让客户端字段的自动完成小部件? 我很感激任何帮助。

【问题讨论】:

  • 您似乎无法在不实际提供要使用的表单的情况下自定义管理表单。您指定其工作的方式是执行此操作的标准方式。您有什么不想创建表单的原因吗?
  • 您始终可以在您正在创建的 ModelAdmin 类上覆盖 get_form,但我想说您现在这样做的方式更简洁、更易于理解。 ModelAdmin 类基于模型创建标准的自定义表单。您需要一个自定义的表单,这正是您可以指定要使用的表单的原因。
  • 好吧,我已经在 OrderAdmin 中实现了一些功能,实现了操作并覆盖了 get_changelist_view 和 get_urls。还有一个多对多字段的插件,水平过滤器,我想保留。

标签: django django-autocomplete-light django-modeladmin


【解决方案1】:

我最终像这样覆盖了 get_form 并且它起作用了

def get_form(self, request, obj=None, **kwargs):
    form = super(OrderAdmin, self).get_form(request, obj, **kwargs)
    form.base_fields['client'].widget = autocomplete.ModelSelect2(url='ordersapp:client-autocomplete')
    return form

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-17
    • 2013-01-06
    • 2021-06-14
    • 2016-01-17
    • 2018-09-20
    • 1970-01-01
    • 2017-03-27
    • 2015-08-25
    相关资源
    最近更新 更多