Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Django表单-构建一个表单,显示来自多个不同模型但按外键排序的字段_Javascript_Python_Django_Django Forms_Django Templates - Fatal编程技术网

Javascript Django表单-构建一个表单,显示来自多个不同模型但按外键排序的字段

Javascript Django表单-构建一个表单,显示来自多个不同模型但按外键排序的字段,javascript,python,django,django-forms,django-templates,Javascript,Python,Django,Django Forms,Django Templates,我不知道如何解决这个问题——我尝试了很多方法,但结果是在提交表单后出现了“太多值无法解包”错误 这是正在使用的模型的简单演示: class Supplier(models.Model): name = models.CharField(max_length=100) class SupplierLocation(models.Model): supplier = models.ForeignKey(Supplier) location = models.CharFiel

我不知道如何解决这个问题——我尝试了很多方法,但结果是在提交表单后出现了“太多值无法解包”错误

这是正在使用的模型的简单演示:

class Supplier(models.Model):
    name = models.CharField(max_length=100)

class SupplierLocation(models.Model):
    supplier = models.ForeignKey(Supplier)
    location = models.CharField(max_length=100)

class Product(models.Model):
    supplier = models.ForeignKey(Supplier)
    name = models.CharField(max_length=100)
    price = models.DecimalField(decimal_places=2,max_digits=10)
我想做的是生成一个有两个单选按钮的表单。SupplierLocation.location是标签,SupplierLocation.id是单选按钮的值。同样,Product.name将是标签,Product.id将是单选按钮的值。我的想法是将它们分组为按Supplier.id排序的块,这样html看起来像这样:

<div>
    <table>
        <tr class="{{ Supplier.name }} hidden">
            <td>{{ location.name }}</td>
            <td><input type="radio" name="location_id" value="{{ location.id }}" /></td>
        </tr>
    </table>
    <table>
        <tr class="{{ Supplier.name }} hidden">
            <td>{{ product.name }}</td>
            <td>{{ product.price }}</td>
            <td><input type="radio" name="product_id" value="{{ product.id }}" /></td>
        </tr>
    </table>
</div>
这给了我产品和位置,但缺少供应商分组或任何隔离供应商的方式,因此我可以用JS隐藏/显示它们


任何帮助都会很棒。

您可以使用
modelcoocefield
而不是手动构建
选项。然后,该字段将有一个
queryset
属性,并且可以在模板中执行类似的操作:

{% regroup form.fields.product.queryset by supplier as grouped_products %}
{% for gp in grouped_products %}
    Supplier: {{ gp.grouper }} 
    {% for choice in gp.list %}
        <input type="radio" name="product" value="{{ choice.pk }}" /> {{ choice }}
    {% endfor %}
{% endfor %}
{%regroup form.fields.product.queryset按供应商分组为\u products%}
{分组的_产品中gp的百分比%}
供应商:{gp.gropper}
{gp.list%中的选择百分比}
{{choice}}
{%endfor%}
{%endfor%}

您可以使用
modelcooicefield
而不是手动构建
选项。然后,该字段将有一个
queryset
属性,并且可以在模板中执行类似的操作:

{% regroup form.fields.product.queryset by supplier as grouped_products %}
{% for gp in grouped_products %}
    Supplier: {{ gp.grouper }} 
    {% for choice in gp.list %}
        <input type="radio" name="product" value="{{ choice.pk }}" /> {{ choice }}
    {% endfor %}
{% endfor %}
{%regroup form.fields.product.queryset按供应商分组为\u products%}
{分组的_产品中gp的百分比%}
供应商:{gp.gropper}
{gp.list%中的选择百分比}
{{choice}}
{%endfor%}
{%endfor%}

谢谢@ilvar-这真是个好消息。我在构建这个表单上浪费了大量的时间,我知道解决方案会非常简单。我还有一个问题-在这个解决方案中有没有办法用radioselect小部件替换输入标签?没有。Select widget将所有LI呈现在一个列表中,因此您在分组时会遇到更多问题。哦,我忘了将一个
输入标记为
选中的
,因此您应该添加一个
{%if choice.pk==form.queryset.value%}
或类似的内容。非常感谢@ilvar-我非常感谢您的帮助,让校验值正常工作真的让我很沮丧。谢谢@ilvar-这真的很有效。我在构建这个表单上浪费了大量的时间,我知道解决方案会非常简单。我还有一个问题-在这个解决方案中有没有办法用radioselect小部件替换输入标签?没有。Select widget将所有LI呈现在一个列表中,因此您在分组时会遇到更多问题。哦,我忘了将一个
输入标记为
选中的
,因此您应该添加一个
{%if choice.pk==form.queryset.value%}
或类似的内容。非常感谢@ilvar-我非常感谢您的帮助,让检查值正常工作真的让我很沮丧。