2016-12-29 14 views
0

フォームにオブジェクトが存在するかどうかを確認しようとしていますが、エラーが表示されます。Django - オブジェクトが存在するかどうかを確認します

私の見解:

def foo(request): 
    titulo = "something" 
    form = MyForm(request.POST or None) 
    queryset = myModel.objects.all() 
    if myModel.objects.filter(name=name).exists(): 
     messages.error(request, 'already exists') 
    context = { 
     "titulo": titulo, 
     "form": form, 
     "queryset": queryset, 
    } 
    if form.is_valid(): 
     instance = form.save() 
     messages.success(request, 'Added') 
     return redirect('/') 
    return render(request, "forms7.html", context) 

基本的に私は、ユーザーが、私が言って警告をしたいが存在する場合は、ユーザーを追加してやってるalready exists

エラー:

UnboundLocalError at /model/ local variable 'name' referenced before assignment

私は間違って何をしていますか?

注: 私は自分のコードにname = 'jesus'を追加し、jesusは、それが動作しますが、それは私が欲しいかではありませんが存在する場合。

私が入ってる名前は私にMSG

を示し、存在するかどうかを確認したい誰かが私を助けてもらえますか?ありがとう。

+3

For example, if you wanted to validate that the contents of a CharField called serialnumber was unique, clean_serialnumber() would be the right place to do this. You don’t need a specific field (it’s just a CharField), but you want a formfield-specific piece of validation and, possibly, cleaning/normalizing the data.

例えば、あなたのような何かをしたいのでしょうか? –

答えて

0

フォームを使用している場合、あなたはこのように、is_validを呼び出し、その後cleaned_dataにアクセスすることにより、入力されたフォームフィールドを取得する:あなたの視野が小さくなるように

理想的
def foo(request): 
    titulo = "something" 
    form = MyForm(request.POST or None) 
    queryset = myModel.objects.all() 
    context = { 
     "titulo": titulo, 
     "form": form, 
     "queryset": queryset, 
    } 

    if form.is_valid(): 
     name = form.cleaned_data['name'] 
     if myModel.objects.filter(name=name).exists(): 
      messages.error(request, 'already exists') 
     else:     
      instance = form.save() 
      messages.success(request, 'Added') 
      return redirect('/') 
    return render(request, "forms7.html", context)  

、あなたのフォームでclean_name機能を持っていると思いますが複雑です。このようなメソッドの作成について詳しくは、hereを参照してください。

変数 `NAME`から来ている
class MyForm(forms.Form) 
    def clean_name(self): 
     name = self.cleaned_data['name'] 
     if myModel.objects.filter(name=name).exists(): 
      raise new forms.ValidationError('The name [%s] already exists' % name)  
     return name 
関連する問題