2016-12-09 2 views
0

私は次の形式を持っている:Djangoのフォームは無効ですが、エラーメッセージなし

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,}) 

問題はImは受信のみということである「フォームを有効なメッセージではありません」フォームが選択肢のみで構成されているので、なぜそれが有効でないのかわからないので、タイプミスはありません。また、私はデバッグするシステムからのフィードバックを持っていないか、またはどこを検索するか分からない。

は* 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です(ただし、1つのアイテムしか表示されず、2つが選択されています)。base_itemで何が起きているのかわかりません。

get_object_or_404 ? 

と私はbase_itemで何ができますか?フォームが無効である場合は、ここに posted from the debug_toolbar

+0

フォームが無効な場合はHttpReponseを送信するのではなく、フォームとエラーでhtmlを表示します。 – anupsabraham

+0

ありがとう、私はまだ、明確な行動の経路はありませんでした。 –

+0

あなたは 'SkuForm'のinitメソッド – anupsabraham

答えて

0

テンプレートに{{form.errorsを}}レンダリングしようとした情報の画像があり、フォームに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

が代わりにHttpResponseを送信する

関連する問題