首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django自动完成Light字段结果不转发

Django自动完成Light字段结果不转发
EN

Stack Overflow用户
提问于 2016-11-14 20:03:25
回答 2查看 782关注 0票数 2

DAL文件中,我将在表单中添加一个筛选字段,但转发并不能将一个字段连接到另一个字段:

Forms.py

代码语言:javascript
复制
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

代码语言:javascript
复制
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)。这是不是因为我传递了一个外键对象?还是我搞错了这件事?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-21 18:56:57

我要为像我这样想“是的,但我仍然不想改变”的人补充一句--实际上是这样的:

代码语言:javascript
复制
 'variety': autocomplete.ModelSelect2(url='variety-autocomplete', forward=['commodity'])

对我来说也没有用,但是把它改为:

代码语言:javascript
复制
 'variety': autocomplete.ModelSelect2(url='variety-autocomplete', forward=('commodity', ))

确实起作用了。注意,它是一个元组,因此您需要有一个",“才能使它工作,因为它应该是一个可迭代的值。

我没有深入研究为什么数组是文档的一部分,但却不能工作,但这是使我的变体工作的关键变化。

而且-我使用的是一个表单集(所以有前缀),这被证明不是一个问题。

票数 1
EN

Stack Overflow用户

发布于 2017-03-04 10:52:28

我不得不抛弃达尔,搬到自举组合框去。事实证明,如果您使用的是引导程序库,那么它实际上很容易实现。

这是如何设置的:

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

forms.py

代码语言:javascript
复制
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

代码语言:javascript
复制
....

<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 %}

非那样做不行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40596910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档