gpt4 book ai didi

Django 文本输入提前自动完成

转载 作者:行者123 更新时间:2023-12-02 17:19:30 25 4
gpt4 key购买 nike

我有一个简单的模型

class Thing(models.Model):

name = models.CharField(max_length=40)
language = models.CharField(max_length=2, default='de')
date_from = models.DateField(default=timezone.now)

在输入现有行中的现有名称时,应在表单中预填充 name 字段。我看了一下 django-select2 或 django-autocomplete-light。但是这两个包主要用于 ForeignKeys。事实上,我在我的项目中也是这样做的。

有没有人知道一种简单的方法来解决这个任务,而无需在 JavaScript 中进行大量修改。

最佳答案

如果不走 JavaScript 路线,我会使用数据列表。

<label for="name-id">Name: </label>

<input list="names" name="name" id="name-id" />

<datalist id="names">
<option value="Vione">
<option value="Veya">
<option value="Argo">
<option value="Paro">
<option value="Esena">
<option value="Sanar">
</datalist>

这可以在 Django 中实现如下:

# Your view

class ThingCreateView(CreateView):
model = Thing
success_url = reverse('thing-list')

def get_form(self, form_class=None):
form = super().get_form(form_class)

# make the 'name' field use a datalist to autocomplete
form.fields['name'].widget.attrs.update({'list': 'names'})

return form

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)

# add `names` to the context to populate the datalist
context['names'] = Thing.objects.values_list('name', flat=True)

return context

# Your form
<form method="post">
{% csrf_token %}

{{ form.as_p }}

<datalist id="names">
{% for name in names %}
<option value="{{ name }}">
{% endfor %}
</datalist>

<input type="submit" value="Save" />
</form>

关于Django 文本输入提前自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44044655/

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