python - Django 自动完成灯列表对象没有属性查询集

标签 python django python-3.x autocomplete django-autocomplete-light

请同时查看我在代码末尾所做的编辑。

我正在尝试为单个字段实现 django-autocomplete-light (dal 3.2.10)。按照教程,我出现了这个错误:'list' object has no attribute 'queryset'。

我看过这个问题:django-autocomplete-light error = 'list' object has no attribute 'queryset' .它没有解决我的问题。

为什么会出现这个错误?我能做些什么来解决这个问题?

我不认为这是全部问题,但我没有在浏览器检查器中看到任何 js 文件。我认为在编辑 #3 中包含代码会导致出现一些问题。

我有两个模型:

class Entity(models.Model):
    entity = models.CharField(primary_key=True, max_length=12)
    entityDescription = models.CharField(max_length=200)
    def __str__(self):
        return self.entityDescription

class Action(models.Model):
    entity = models.ForeignKey(Entity, on_delete=models.CASCADE, db_column='entity')
    entityDescription = models.CharField(max_length=200)
    action = models.CharField(max_length=50)
    def __str__(self):
        return '%s' % self.entity

我有一个模型表单和表单集。我还使用 crispy-forms 来呈现表单集:

class ActionForm(ModelForm):
class Meta:
    model = Action
    fields = '__all__'
    widgets = {
        'entityDescription': autocomplete.ModelSelect2(url='eda')
    }

ActionFormSet = modelformset_factory(Action, extra=1, exclude=(), form=ActionForm)

我有一个观点:

class EntityDescriptionAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
    qs = Entity.objects.all()
    if self.q:
        qs = qs.filter(entityDescription__istartswith=self.q)
    return qs

我有一个 urls.py:

urlpatterns = [
    url(
        r'^eda/$',
        views.EntityDescriptionAutocomplete.as_view(),
        name='eda',
    ),
]

感谢您提供任何见解。

编辑:

我改变了...

widgets = {
        'entityDescription': autocomplete.ModelSelect2(url='eda'),
}

...到...

widgets = {
        'entityDescription': autocomplete.Select2(url='eda'),
}

...这允许我的页面呈现,但自动完成字段是一个空的下拉列表。为什么它是空的,为什么它不是自动完成框?

编辑#2:

我删除了元类中的小部件设置,而是直接覆盖该字段:

class ActionForm(ModelForm):
    entityDescription = ModelChoiceField(
        queryset=Entity.objects.all(),
        widget=autocomplete.ModelSelect2(url='eda')
        )
    class Meta:
        model = Action
        fields = '__all__'

这仍然会返回一个空的下拉列表(不是自动完成框),但它现在有 Django 的 ------- 指示符,而不是什么都没有。

编辑#3:

我将其添加到我的模板中:

{% block footer %}
<script type="text/javascript" src="/static/collected/admin/js/vendor/jquery/jquery.js"></script>
{{ form.media }}
{% endblock %}

没有任何变化。

最佳答案

您的 ActionFormEntityDescriptionAutocomplete 看起来不错。

您的自动完成 View 是否返回结果?

您应该能够浏览到自动完成 View 的 URL(在您的例子中为 /eda)并查看查询的 JSON 结果。集合是否非空?

{"pagination": {"more": true}, "results": [{"text": "foo", "id": "1" ...
                                           ^^^^^^^^^^^^^^^^^^^^^^^^

您呈现的 HTML 是否包含这些库?

您应该在 HTML 源代码中看到以下内容,其中放置了 {{ form.media }} 标记:

<link href="/static/autocomplete_light/vendor/select2/dist/css/select2.css" type="text/css" media="all" rel="stylesheet" />
<link href="/static/autocomplete_light/select2.css" type="text/css" media="all" rel="stylesheet" />
<script type="text/javascript" src="/static/autocomplete_light/jquery.init.js"></script>
<script type="text/javascript" src="/static/autocomplete_light/autocomplete.init.js"></script>
<script type="text/javascript" src="/static/autocomplete_light/vendor/select2/dist/js/select2.full.js"></script>
<script type="text/javascript" src="/static/autocomplete_light/select2.js"></script>

如果没有,

您指的是正确的表单变量吗?

{{ form.media }} 中的 form 应该引用您在传递给页面模板的上下文中为表单指定的任何名称。

关于python - Django 自动完成灯列表对象没有属性查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46061703/

相关文章:

python - timeit 的奇怪结果

javascript - 如何在 for 循环中的输入元素上使用 Javascript 函数。 Django

python - split() 和 replace (' ' ,'' ) 有什么区别?

django - 移动应用程序的社交登录以使用 django-allauth

python - 如何将分隔值转换为one-hot编码列?

python-3.x - 处理 NaN 的成对距离

python - 为什么 self 不会自动传递给实例化后在对象上设置的方法?

python - 访问/存储脚本的 Heroku API key 的正确位置

python - 通过python将变量写入mysql时出错

python - Django - 如果在给定的查询列表中找不到记录,则返回无对象