【问题标题】:Admin form for django-autocomplete-lightdjango-autocomplete-light 的管理表单
【发布时间】:2016-03-17 13:48:15
【问题描述】:

我正在尝试使用 django-autocomplete-light 向 Django Admin 表单添加一些不错的自动完成功能。 (DAL 似乎是最好的/最受欢迎的,而且似乎有很多很棒的功能,可惜文档的结构如此糟糕)。

如果我创建这样的管理表单,则不会创建自动完成字段:

@admin.register(RaffleTicket)
class RaffleTicketAdmin(admin.ModelAdmin):
    model = RaffleTicket
    code = forms.IntegerField()
    bought_by = autocomplete_light.ModelChoiceField('PersonAutocomplete')

但如果我创建一个普通的ModelForm(我从不在其他任何地方使用)并将其直接推入我的ModelAdmin,它就可以工作,如下所示:

class RaffleTicketForm(forms.ModelForm):
    code = forms.IntegerField()
    bought_by = autocomplete_light.ModelChoiceField('PersonAutocomplete')


@admin.register(RaffleTicket)
class RaffleTicketAdmin(admin.ModelAdmin):
    model = RaffleTicket
    form = RaffleTicketForm

为什么会这样?还有比我发现的更好的方法(即单一类定义)吗?

【问题讨论】:

    标签: python django autocomplete django-autocomplete-light


    【解决方案1】:

    第一个代码不起作用,因为它在 modeladmin 类中设置了表单字段,这根本没有理由起作用,你从来没有在任何文档中看到过。

    你试过这个吗?

    @admin.register(RaffleTicket)
    class RaffleTicketAdmin(admin.ModelAdmin):
        model = RaffleTicket
        form = autocomplete_light.modelform_factory(RaffleTicket)
    

    【讨论】:

    • 是的,你是对的,我这里的表单应该有 fields = ('code', 'bought_by') 并且我应该已经定义了 Model 类。无论如何,我放弃了 DAL 并改用 django-select2 库。
    • 我们将把 DAL 分解成更小的应用程序,并使其与 django-select2 等兼容(这样即使使用 django-select2 也能获得安全性;))
    猜你喜欢
    • 2015-08-25
    • 2016-10-12
    • 2016-09-10
    • 2013-01-06
    • 2021-06-14
    • 2017-12-02
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多