【问题标题】:How to use django-autocomplete-light on form with multiple charfields如何在具有多个字符字段的表单上使用 django-autocomplete-light
【发布时间】:2020-05-11 19:57:35
【问题描述】:

我已经安装了django-autocomplete-light。

我的没有自动完成功能的表单如下所示:

class FilterForm(forms.Form):
    form_origin = forms.CharField(label='From country',
                                  max_length=100,
                                  required=False,
                                  widget=forms.TextInput(attrs={
                                      'placeholder': 'From country',
                                      'arial-label':'C2',
                                  }))
    form_target = forms.CharField(label='To country',
                                  max_length=100,
                                  required=False,
                                  widget=forms.TextInput(attrs={
                                      'placeholder': 'To country',
                                      'arial-label': 'C1',
                                  }))

我在instructions here 之后写了一个视图,它给出了所有以我输入的相同字母开头的国家。

class CountryAutocomplete(autocomplete.Select2QuerySetView): 
    def get_queryset(self):
        qs = Country.objects.all()
        qs = qs.filter(name__istartswith=self.q)
        return qs

但是,我在将它与具有两个字符字段的表单一起使用时遇到问题,两者都使用称为 Country 的相同模型。本教程不是为此量身定制的。本质上,我希望有两个文本框,自动完成国家往返,有点像天巡。任何关于正确方向的建议都值得赞赏!

我的模型如下所示:

class Country(models.Model):
    iso3 = models.CharField('3 Digit ISO', max_length=3, unique=True)
    name = models.CharField('Name', max_length=50)
    lon = models.FloatField()
    lat = models.FloatField()

    def __str__(self):
        return self.name

更新:

我的网址是这样的:

re_path(r'^country-autocomplete/$', views.CountryAutocomplete.as_view(), name='country-autocomplete'),

在 Sumit 的帮助下,我已将我的表单更新为:

    form_origin = forms.CharField(label='From country',
                                  max_length=100,
                                  required=False,
                                  widget=autocomplete.ListSelect2(
                                      url='myapp:country-autocomplete',
                                  ))

但是我得到一个没有可选字段的下拉列表:

我正在使用引导程序,我的模板如下所示:

{% for field in form %}
     <div class="form-inline form-group">
            <div class="col-sm-10">
                  {{ field|attr:"class:form-control" }}
             </div>
    </div>
{% endfor %}

【问题讨论】:

    标签: python django django-forms django-autocomplete-light


    【解决方案1】:

    您的带有自动完成功能的表单是什么样的?或者你还没有它?如果你不这样做,那么你可以这样尝试:

    form_origin = forms.CharField(label='From country',
                                      max_length=100,
                                      required=False,
                                      widget=autocomplete.ModelSelect2(url='YOUR_APP_NAME:CountryAutocomplete'))
    

    对目的地也做同样的事情。

    另外,在 URL.py 名称中确保它被声明为:

    path('CountryAutocomplete/', views.CountryAutocomplete.as_view(), name = 'CountryAutocomplete'),
    

    【讨论】:

    • 非常感谢您的帮助。我尝试使用该解决方案,并添加了网址。但是我收到了一个错误AttributeError: 'list' object has no attribute 'queryset'。我遵循了这条指令here。现在我只有两个没有可选择内容的下拉框。
    • 您是否完成了@chidimo 在他对 2018 年的评论中所说的所有其他事情,例如将 dal 和 dal_select2 置于所有其他应用程序之上?我不必做他对 widgets.py 建议的更改,所以不要尝试那个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 2016-01-17
    • 2018-08-04
    • 2015-10-15
    • 2016-10-12
    • 1970-01-01
    相关资源
    最近更新 更多