gpt4 book ai didi

Django,如何以自定义形式使用管理自动填充字段

转载 作者:行者123 更新时间:2023-12-03 16:56:03 30 4
gpt4 key购买 nike

在Django管理界面中,您可以将字段设置为autocomplete field,例如:

autocomplete_fields = ('countries', )
这对于管理页面非常有用,如何在自定义 View /表单中使用自动完成字段?我的研究指向django-autocomplete-light,但是当Django已经具有内置功能时,安装第3方软件包似乎是不理想的。

最佳答案

实际上,可以使用来自管理员的select2。
您只需要使用AutocompleteSelect小部件。 AutocompleteSelect小部件需要一个关系和一个管理站点。
如果您的A模型具有一个ForeignKey字段,该字段指向您要使用AutocompleteSelect的B模型,则可以简单地使用(由cuto建议)。

from django.contrib.admin.widgets import AutocompleteSelect
from myapp.model import ModelA, ModelB
from django.contrib import admin


class MyForm(form.Form):
model_b = forms.ModelChoiceField(
queryset=ModelB.objects.all(),
widget=AutocompleteSelect(ModelA._meta.get_field('model_b').remote_field, admin.AdminSite)
)

因为没有关系,所以我使用了 FakeRelation类,因为 get_url(self)函数仅使用model属性。
AutocompleteSelect小部件的使用与autocomplete_fields小部件的使用具有相同的条件。
from django.contrib.admin.widgets import AutocompleteSelect
from django.contrib import admin
from django import forms
from myapp.models import countries

class FakeRelation:
def __init__(self, model):
self.model = model


class CustomAutocompleteSelect (AutocompleteSelect):
def __init__(self, model, admin_site, attrs=None, choices=(), using=None):
rel = FakeRelation(model)
super().__init__(rel, admin_site, attrs=attrs, choices=choices, using=using)

class PreventionPlanForm(form.Form):
DateFrom = forms.DateField(label="From")
DateTo = forms.DateField(label="To")
PE1_Name = forms.ModelChoiceField(
queryset=countries.objects.all(),
widget=CustomAutocompleteSelect(countries, admin.AdminSite)
)
正如 jenniwren所指出的:确保在模板中加载正确的Javascript/CSS文件(路径可能会在不同的Django版本中更改):
  • admin/css/vendor/select2/select2.css
  • admin/js/vendor/select2/select2.full.js
  • admin/css/autocomplete.css
  • admin/js/autocomplete.js
  • 关于Django,如何以自定义形式使用管理自动填充字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57143113/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com