代码之家  ›  专栏  ›  技术社区  ›  juju

在模板中循环模型时,如何将唯一ID字段从模型传递到django表单?

  •  0
  • juju  · 技术社区  · 6 年前

    我需要为从Django模板中的循环生成的每个表单创建唯一的ID。我用 {% for product in products %} 循环遍历一些数据。在我的 forms.py 我编辑form.widget.select属性以添加/更改 onchange id 领域。我把它穿过去了 views.py 我的模板作为 {{form}} ,这是排队 表单 :

    condition = forms.ChoiceField(choices=condition_choices, widget=forms.Select(attrs={'onchange' : "showChange(this)", "id":"{{product.id}}"}))
    

    我希望该ID呈现为与每个产品关联的唯一ID,并且希望onchange调用 js 功能。当我将表单打印到控制台时,它看起来如下:

    <select name="condition" onchange="showChange(this)" id="{{product.id}}">
      <option value="NM / LP">Near Mint / Lightly Played</option>
    
      <option value="MP">Moderately Played</option>
    
      <option value="HP">Heavily Played</option>
    
      <option value="Damaged">Damaged</option>
    
      <option value="Unopened">Unopened</option>
    
    </select>
    

    我希望ID字段是实际的ID,而不是 {{product.id}} 如果将此表单完全粘贴到HTML中而不将其呈现为Django表单,则它将按预期工作。如何在不将数据库导入的情况下将产品的唯一ID传递给Django表单 表单 /额外的数据库调用?

    1 回复  |  直到 6 年前
        1
  •  2
  •   VIctor Angelov    6 年前

    不能使用 {{product.id}} 在.pI文件中。这是一个django模板引擎标签。

    在你 VIEW 您应该这样创建表单:

    product = Product.objects.get(pk=1)
    
    form = ProductForm(instance=product)
    
    context = {
        'form': form
    }
    

    当您传递表单时,可以在 __init__ 方法。

    你的表格会像这样

    class ProductForm(forms.ModelForm):
    
    class Meta:
        model = Product
        exclude = ()
    
    def __init__(self, *args, **kwargs):
        super(ProductForm, self).__init__(*args, **kwargs)
        instance = kwargs['instance']
        self.fields['condition'].widget.attrs['id'] = instance.id