Django自动完成轻空选择框

时间:2017-09-06 15:11:15

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

为什么django-autocomplete-light的实现会产生一个空的下拉框?我认为它可能是加载静态文件或错误地映射到urls.py。

编辑:我是否需要以某种方式收集dal使用的静态文件?有了collectstatic吗?我意识到是的,所以我收集了我的文件并检查了它们的路径,但没有任何改变。

我在GitHub问题上看到了类似的问题,但那里的解决方案并没有影响我的情况,解决方案通常只是对使用的字段类型做出妥协。

我已经按照dal教程生成了以下文件。这些文件都在我的actions应用内,包括urls.py:

models.py

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')
    action = models.CharField(max_length=50)
    def __str__(self):
        return '%s' % self.entity

forms.py:

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

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

我使用crispy-forms渲染formset。

views.py:

class EntityAutocomplete(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'actions', views.actions, name='actions'),
    url(
        r'^eda/$',
        views.EntityDescriptionAutocomplete.as_view(),
        name='eda',
    ),
]

这是在我的模板中:

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

转到http://127.0.0.1:8000/eda会产生看似合适的JSON:

{"results": [{"id": "123", "text": "123 - Michael Scott"}, {"id": "234", "text": "234 - Jim Halpert"}, {"id": "345", "text": "345 - Pam Beasley"}], "pagination": {"more": false}}

撤销网址......

>>>from django.urls import reverse
>>>reverse('eda')
'/eda/'

......似乎按预期工作

使用此设置,结果是一个带有Django&#39; -------能指的选择框:

enter image description here

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

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

......结果是一样的。

我是否需要做其他事情才能获得正确的静态文件?我是否错误地映射到urls.py?

0 个答案:

没有答案