2016-04-16 7 views
0

私はif文に問題があります。なぜなら、常にTrueを返すからです。djangoでステートメントが常にtrueを返す場合

私はユーザーがプロフィール情報を変更できるフォームを持っています。今は、エラーメッセージを表示するために既に存在する電子メールアドレスを入力しようとしますが、現在の電子メールアドレスを変更しないときにも名前を変更したい場合があります。たとえば、名前だけが変更されるようにします。私が使用するコードは次のとおりです。だから、

def profil_update(request, slug=None): 

    instance = get_object_or_404(Guest, slug=slug) 
    form = UpdateGuestProfileForm(request.POST or None, request.FILES or None, instance=instance) 
    if form.is_valid(): 
     print (str(request.POST['email'] == instance.email)) 

     if not request.POST['email'] == instance.email and Guest.objects.filter(email = request.POST['email']).exists(): 
      messages.error(request, 'That email address is already taken.', extra_tags='email_exists') 
     else: 
      instance = form.save(commit = False) 
      instance.save() 
      messages.success(request, "Success", extra_tags='profile_updated') 
      return HttpResponseRedirect(instance.get_absolute_url()) 

    context = { 
     "guest": instance, 
     "form": form 
    } 

    return render(request, "base_profile_guest.html", context) 

、私は「request.POST [ 『メール』] == instance.get_email()は、」常に真であるため、問題があると思います。私はすべてを試して、それは常に真実です。電子メールアドレスが等しくない場合でも、常に真です。これは単に、あなただけのユニークな電子メールを強制するためにモデルにこれを設定することができます学習行使しない限り

答えて

1

あなたのビューでこれを行う必要はありません:

Guest(models.Model): 

     .... 
     email = models.EmailField(..., unique=True, ...) 
     .... 
+0

はい、私はこれを今行っていますが、変更を保存できない理由をユーザーに伝えていません。どのようにすればいいですか? – P3P5

0

私は、スレイヤーのおかげで、それを解決しました。私がしたのは以下の通りです:

私はモデルデータに「unique = True」を追加しました。フォームが有効でない場合は、エラーメッセージを書きます。答えはいつも私はそれができない、私の間違いだった。

関連する問題