2016-04-06 2 views
1

以下のビューでは、同じ日付と時刻の会議の作成を禁止します。しかし、とにかく、このコードは、繰り返しの会議を作成します。Djangoビュー:DoesNotExistが機能していない

def new_meeting_board(request): 
    if User.is_authenticated: 
     username = request.user.username 
    else: 
     return HttpResponseRedirect('/login/board/') 

    if request.method == 'POST': 
     form = new_meetingForm(request.POST) 

     now = datetime.datetime.now() 

     if form.is_valid(): 
      clash = 1 
      user = User.objects.get(username = username) 

      try: 
       meet_check = meeting.objects.get(date = form.cleaned_data['date'], time = form.cleaned_data['time']) 
      except meeting.DoesNotExist: 
       clash = 0 

      if clash == 1: 
       form = new_meetingForm() 
       variables = RequestContext(request, { 
        'username': username, 
        'form': form, 
       }) 
       return render_to_response('new_meeting_board.html', variables) 


      else: 
       mem = memo(
        snd_username = user, 
        rcv_username = form.cleaned_data['reciever'], 
        subject = 'Meeting', 
        date = str(now.year) + '-' + str(now.month) + '-' + str(now.day), 
        time = str(now.hour) + ':' + str(now.minute), 
       ) 
       mem.save() 

       mee = mem.meeting_set.create(
        snd_username = username, 
        rcv_username = mem.rcv_username, 
        status_username = '0', 
        date = form.cleaned_data['date'], 
        time = form.cleaned_data['time'], 
        venue = form.cleaned_data['venue'], 
       ) 
       mee.save() 
       return HttpResponseRedirect('/dashboard/board/' + username) 
    else: 
     form = new_meetingForm() 


    variables = RequestContext(request, { 
     'username': username, 
     'form': form, 
    }) 
    return render_to_response('new_meeting_board.html', variables) 

try/exceptブロック以外の部分は何らかの理由で機能していないようです。助けてください。

+0

あなたはそれが捕まえられていない取得しているエラーを投稿できますか?それはキャッチする必要があります – awwester

+0

エラーは発生しません。フォームデータに「時間」と「日付」が繰り返し発生し、同じタプルデータを持つ会議オブジェクトが存在する場合、clashの値は1のまま残り、 'else'ブロックを実行する必要があります。それは起こらないようです。 –

答えて

1

meeting.objectsはおそらくMeeting.objects

+0

ミーティングのモデルクラスは**ミーティング**です。したがって、** Meeting **は動作しません。 –

1

複数の再フォーマットや最適化がありますが、あなたのコード内で行うことができますする必要があります。 get()を使用する代わりに、get_or_createを使用してコードを最適化することができます。あなたはこのようなコードを書くことができます:

def new_meeting_board(request): 
    if not request.user.is_authenticated(): # there is a mistake in your code, its not User.is_authenticated. 
     return HttpResponseRedirect('/login/board/') 

    if request.method == 'POST': 
     form = new_meetingForm(request.POST) 
     now = datetime.datetime.now() 

     if form.is_valid(): 
      user = request.user 

      meet_obj, meet_check = meeting.objects.get_or_create(
        date = form.cleaned_data['date'], 
        time = form.cleaned_data['time'], 
        subject = 'Meeting', 
        snd_username=user, 
        rcv_username = form.cleaned_data['reciever'] 
       ) 

      if meet_check is True: 
       form = new_meetingForm() 
       variables = RequestContext(request, { 
        'form': form, 
       }) 
       return render_to_response('new_meeting_board.html', variables) 

      else: 
       mee = meet_obj.meeting_set.create(
        snd_username = username, 
        rcv_username = meet_obj.rcv_username, 
        status_username = '0', 
        date = form.cleaned_data['date'], 
        time = form.cleaned_data['time'], 
        venue = form.cleaned_data['venue'], 
       ) 
       mee.save() 
       return HttpResponseRedirect('/dashboard/board/' + username) 
    else: 
     form = new_meetingForm() 


    variables = RequestContext(request, { 
     'form': form, # no need to send username, You can access it in the template by putting {{ request.user.username }} 
    }) 
    return render_to_response('new_meeting_board.html', variables) 
関連する問題