Django Autocomplete Light - FK 字段结果不转发

标签 django django-autocomplete-light

我正在关注DAL documentation向我的表单添加过滤字段,但转发无法将一个字段连接到另一个字段:

Forms.py

class PurchaseForm(forms.ModelForm):

    commodity = forms.ModelChoiceField(
        queryset=Commodity.objects.all(),
        widget=autocomplete.ModelSelect2(url='commodity-autocomplete'),
        required=False,
    )

    class Meta:
        model = Purchase
        fields = ["variety"]
        widgets = {
            'variety': autocomplete.ModelSelect2(url='variety-autocomplete', forward=['commodity'],   
        }

Views.py

class VarietyAutocompleteView(autocomplete.Select2QuerySetView):
    def get_queryset(self):
        qs = Variety.objects.all()

        commodity = self.forwarded.get('commodity', None)
        print("Commodity:" + str(commodity))
        if commodity:
            qs = qs.filter(commodity=commodity)

        if self.q:
            qs = qs.filter(name__istartswith=self.q)

        return qs

我希望根据与商品对象的外键关系来过滤我的品种选择。两个自动完成字段都可以单独工作,但是 commodity 字段中的选择不会转发到 VarietyAutocompleteView (我的打印命令打印 Commodity:None )。这可能是因为我传递了外键对象吗?或者我是否设置错误?

最佳答案

我不得不废弃 DAL 并移至 Bootstrap Combobox 。事实证明,只要您使用 Bootstrap 库,它就非常容易实现。

这是如何设置的:

将类combobox添加到选择小部件:

forms.py

from django import forms

from Business.models import Company, Branch
from .models import Variety

class PurchaseForm(forms.ModelForm):

    variety = forms.ModelChoiceField(
        queryset=Variety.objects.all(),
        widget=forms.Select(attrs={'class': 'combobox'}),
        required=False
    )

    class Meta:
        model = Purchase
        fields = [
            "invoice", "contract_date", ...
        ]

然后,插入最简单的 JavaScript 片段:

inventory_report.html

....

<td style="padding-bottom: 10px">
    <div>Supplier:</div>
    <div>{{ view.purchase_form.supplier }}</div>
</td>

....
{% block scripts %}
    <script type="text/javascript" src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
    <script type="text/javascript" src="{% static 'js/bootstrap-combobox.js' %}"></script>

        $(document).ready(function(){

            // Set Text Autofields on New Contract
           $('.combobox').combobox();

        });

    </script>
    {{ view.purchase_form.media }}
{% endblock %}

这就是全部内容。

关于Django Autocomplete Light - FK 字段结果不转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40596910/

相关文章:

python - Django REST Framework 基于 URL 过滤查询集

超过 3 个模型的 django-autocomplete-light 依赖过滤器

python - 如何将值从 html 传递到 python

python - 字符串不会在 Django 中使用 Python 2.7 中可用的格式函数进行翻译

django - 不带过滤器的输出时区感知 django 日期时间字段

django - 在 Django 1.7c2 中运行迁移时出现循环依赖错误

python - 将 CSS 类添加到 Django-Autocomplete-Light ModelSelect2 容器/选择

python - Django Autocomplete Light 限制查询结果

javascript - 以编程方式选择 django-autocomplete-light 中的第一个建议