如何在模型表单中使用自动完成选择小部件

Cyb*_*hoe 5 python django modelform

我知道 Django 2.0 中有一个新功能,它是 ModelAdmin 中的 AutocompleteSelect 小部件。我试图在我的自定义 modelForm 中使用它,但失败了。

像这样试过

#unit is the foreign key to the incident

class AccountForm(forms.ModelForm):
    class Meta:
        model = Invoice
        ...
        ...
        widgets = {       'incident':widgets.AutocompleteSelect(Invoice._meta.get_field('incident').remote_field, admin.site)
        }
        ...
Run Code Online (Sandbox Code Playgroud)
#Invoice model

class Invoice(models.Model):
    ...
    incident = models.ForeignKey(Unit, on_delete=models.CASCADE,null=True)
    ...
Run Code Online (Sandbox Code Playgroud)

希望任何人都可以帮助我。谢谢

小智 5

AutocompleteSelect 小部件将无法在管理站点之外工作。如果您在管理站点中使用 AccountForm,则可以使用以下代码:

class AccountForm(forms.ModelForm):
    ...
    incident = forms.ModelChoiceField(
                 queryset= Unit.objects.all(),
                 widget=AutocompleteSelect(Invoice.incident.field.remote_field, admin.site),
               )
    ...
    class Meta:
        model = Invoice
        fields = [
            'incident',
            ...
        ]

@admin.register(Invoice)
class InvoiceAdmin(admin.ModelAdmin):
    form = AccountForm
Run Code Online (Sandbox Code Playgroud)

  • `Invoice.incident.field.remote_field` 一直使用到 Django 3.1 在 Django 3.2 中它只是 `Invoice.incident.field` https://code.djangoproject.com/ticket/32619 (4认同)