2017-11-13 12 views
1

私はdjango-filterを使用しています。私はしかし、フォームフィールドをループしようとしていますが、standard django attributesは機能しません。唯一のものは{{ form.id_for_label }}です。何か不足していますか?Django-Filter |フォームフィールドのルーピング

マイテンプレートコード:

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

私は私のスタイリングに収まるようにその逆を動作するようにそれを必要とするだろう、一方、それは<input><label>をロードするので、私は単に{{ form }}を使用したくない理由があります。私はスタイリングを変更する必要はありません。彼らはここでは、必要とされている場合には

は私の(簡体字)modelsFilterSetと私の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'] 

Vi EW:あなたはParentalManyToManyFieldが何であるかを不思議に思っている場合には

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 

、それはWagtail CMSクラスです。

+0

{{ form.data.value }}を指定する必要があります。これを最初に試してみてください。 {%、form.fields.instruments.choices%} {%endfor% } –

+0

@bhattravii OK私はOPを更新しました。 Nopeは残念なことに何もしなかった。 – DDiran

+0

form.form.product_colours%}のフォームの{%の後にチェックインフォーム%%} {%endfor%}を入れて、そこに入っているフィールドを確認してください – Vaibhav

答えて

0

OK解決策を見つけました。上記のコメントで@Vicmathurというユーザーが提案したように、{% for check in form %}{% endfor %}を追加して、'BoundWidget' object is not iterableというエラーをスローしました。

私はBoundWidgetをgoogledして、related Django documentationを見つけました。代わりにたとえば、{{ form.value }}のために、を介してデータにアクセスしようとするの

は、私はあなたが製品のためのモデルを追加してくださいすることができ