2016-12-09 2 views
0

나는 다음과 같은 형태를 따른다 :장고 양식이 유효하지 않습니다,하지만 오류 메시지

class SkuForm(forms.Form): 
    base_item = forms.ModelChoiceField(queryset=BaseItem.objects.none()) 
    color_or_print = forms.ModelMultipleChoiceField(queryset=Color.objects.none()) 
    material = forms.ModelMultipleChoiceField(queryset=Material.objects.none()) 
    size_group = forms.ModelMultipleChoiceField(queryset=Size_Group.objects.none()) 

내보기 :

def sku_builder(request): 
if request.method == "POST": 
    user = request.user 
    form = SkuForm(request.POST) 
    if form.is_valid(): 
     base_item = form.cleaned_data['base_item'] 
     colors = filter(lambda t: t[0] in form.cleaned_data['color_or_print'], form.fields['color_or_print'].choices) 
     materials = filter(lambda t: t[0] in form.cleaned_data['material'], form.fields['material'].choices) 
     size_groups = filter(lambda t: t[0] in form.cleaned_data['size_group'], form.fields['size_group'].choices) 
     return render(request, 'no_entiendo.html', {'colors': colors, }) 
    else: 
     return HttpResponse("form is not valid") 
user = request.user 
form = SkuForm() 
form.fields['base_item'].queryset = BaseItem.objects.filter(designer=user) 
form.fields['color_or_print'].queryset = Color.objects.filter(designer=user) 
form.fields['material'].queryset = Material.objects.filter(designer=user) 
form.fields['size_group'].queryset = Size_Group.objects.filter(designer=user) 
return render(request, 'Disenador/sku_builder.html', {'form': form,}) 

문제는 필자 만받는 것입니다 "양식을 유효한 메시지 아니다" Form이 선택 항목으로 만 구성되어 있으므로 오타가 잘못되어 왜 유효하지 않은지 알 수 없습니다. 또한 디버깅 할 시스템으로부터의 피드백이 없거나 검색 할 위치를 모른다. form.is_valid는 전체 코드가 아닙니다 후

은 * 무슨 일이

UPDATE : 가 나는 {{form.errors을}}두고있어이 : color_or_print

Select a valid choice. 6 is not one of the available choices. 

base_item

Select a valid choice. That choice is not one of the available choices. 

크기 그룹

Select a valid choice. 2 is not one of the available choices. 

size_group 및 color_or_print에서 번호는 pk입니다 (단 하나의 항목 만 표시하고 2 개는 선택됨). base_item에서 무슨 일이 일어나는지 확실하지 않습니다. 다음을 통해 값을 추출해야합니까?

get_object_or_404 ? 

및 base_item으로 무엇을 할 수 있습니까? 여기 posted from the debug_toolbar

+0

잘못된 양식 인 경우 HttpReponse를 보내는 대신 양식과 오류로 html을 렌더링하십시오. – anupsabraham

+0

고마워요, 저도 그래도 명확한 행동 경로는 없습니다. –

+0

'SkuForm'의 init 메소드 인 – anupsabraham

답변

0

대신, 당신은 형태가 무효 인 경우 형태와 HTML을 렌더링 할 필요가 . 당신이 모델 선택 필드를 사용하는 경우 또한

if form.is_valid(): 
    # Do your operations on the data here 
    ... 
    return render(request, 'no_entiendo.html', {'colors': colors, }) 
else: 
    return render(request, 'Disenador/sku_builder.html', {'form': form,}) 

, 당신의 검색어 세트를 정의 할 수있는 이상적인 장소 양식의 __init__ 방법

def __init__(self, *args, **kwargs): 
    user = kwargs.pop('user') 
    self.fields['base_item'].queryset = BaseItem.objects.filter(designer=user) 
    # define more querysets here as you require 
    ... 
    super(SkuForm, self).__init__(*args, **kwargs) 

당신은보기에서의 검색어를 변경할 수 있습니다입니다. 그러나 내가 이해하는 한, 귀하가 귀하의 양식에 설정 한 것을 무효화하는 방법입니다. 일반적으로 __init__으로 설정해야합니다.

0

시도가 템플릿에 {{form.errors을}} 렌더링 할 수있는 정보의 이미지가 HttpResponse을 보내는

관련 문제