我正在使用按预期工作的django-filter
。然而,我正在尝试遍历表单字段,但standard django attributes无法正常工作。唯一能做的就是{{ form.id_for_label }}
。我错过了什么吗?
我的模板代码:
<form action="" method="get">
{% for form in forms.form.product_colours %}
<div class="form-group">
<input type="checkbox" name="product_colours" id="{{ form.id_for_label }}" value="{{ form.value }}">
<label for="{{ form.id_for_label }}">{{ form.label }}</label>
</div>
{% endfor %}
<input type="submit" />
</form>
我不想简单地使用{{ form }}
的原因是因为它在<label>
之前加载了<input>
,而我需要它来反复工作以适应models
进入我的造型。我宁愿不必改变造型。
如果需要,我的(简体)FilterSet
,view
和我的class ProductColour(models.Model):
name = models.CharField(max_length=255)
colour_hex = models.CharField(max_length=16, default="#FFF")
def __str__(self):
return self.name
class Product(Page):
# My product fields
product_colours = ParentalManyToManyField('products.ProductColour', blank=True)
:
模型:
class ProductFilter(django_filters.FilterSet):
product_colours = django_filters.ModelMultipleChoiceFilter(name="product_colours",
label="Product Colour",
widget=forms.CheckboxSelectMultiple,
queryset=ProductColour.objects.all(),
conjoined=False)
class Meta:
model = Product
fields = ['product_colours']
FilterSet :
def get_context(self, request):
context = super(Page, self).get_context(request)
all_products = ProductFilter(request.GET, queryset=Product.objects.live()).qs
forms = ProductFilter(request.GET, queryset=Product.objects.live())
paginator = Paginator(all_products, 9) # Show 9 resources per page
page = request.GET.get('page')
try:
products = paginator.page(page)
except PageNotAnInteger:
products = paginator.page(1)
except EmptyPage:
products = paginator.page(paginator.num_pages)
context['forms'] = forms
context['products'] = products
return context
查看:
ParentalManyToManyField
如果您想知道Mouse Hover
是什么,它是Wagtail CMS类。
答案 0 :(得分:1)
好的,所以我找到了解决方案 - 正如用户@Vicmathur在上面的评论中建议的那样,我尝试添加{% for check in form %}{% endfor %}
并且它引发了'BoundWidget' object is not iterable
错误。
所以我用Google搜索了BoundWidget
并找到了related Django documentation。
我没有尝试通过{{ form.value }}
访问数据,而是指定{{ form.data.value }}