2017-11-13 7 views
1

나는 의도 한대로 작동하는 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> 

단순히 내 스타일에 맞게 viceversa에 일을하는 데 필요한 것입니다 반면에 그것은 <input> 전에 <label>를로드하기 때문에 {{ form }}는 사용하지 않으려는 이유. 나는 스타일을 바꾸지 않는 것을 선호한다.

모델 :

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) 

FilterSet :

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

그들이 필요한 경우

, 여기 내 (간체) models, FilterSetview 있습니다 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

좋아요. 해결책을 찾았습니다. 사용자 @Vicmathur가 위의 설명에서 제안한대로 {% for check in form %}{% endfor %}을 추가하려고 시도했으며 'BoundWidget' object is not iterable 오류가 발생했습니다.

Google 검색 결과 BoundWidget이 (가) related Django documentation입니다. 대신 예를 들어, {{ form.value }}를 들어,를 통해 데이터 액세스를 시도의

, 나는 당신이 제품에 대한 모델을 추가하십시오 수 있습니다