質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1506閲覧

django IndexError list index out of rangeエラー

退会済みユーザー

退会済みユーザー

総合スコア0

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/05/13 04:29

編集2019/05/13 04:46

djangoでwebアプリを作っています。

IndexError list index out of rangeエラーが表示されます。
該当行は
mail = form_value[2] です。

error

1IndexError at /app/ 2list index out of range 3Request Method: GET 4Request URL: 5Django Version: 2.2 6Exception Type: IndexError 7Exception Value: 8list index out of range 9 10C:\virtualenv\manager\app\views.py in get_queryset 11 return context 12 def get_queryset(self): 13 # sessionに値がある場合、その値でクエリ発行する。 14 if 'form_value' in self.request.session: 15 form_value = self.request.session['form_value'] 16 employeenumber = form_value[0] 17 name = form_value[1] 18 mail = form_value[2] #エラー 19 # 検索条件 20 condition_employeenumber = Q() 21 condition_name = Q() 22 condition_mail = Q() 23 if len(employeenumber) != 0 and employeenumber[0]: 24 condition_employeenumber = Q(employeenumber__icontains=employeenumber)

models.py

1class InfoModelForm(models.Model): 2 employeeid = models.CharField('社員ID',max_length=255) 3 employeenumber = models.CharField('社員番号',max_length=255) 4 name = models.CharField('氏名',max_length=255) 5 kana = models.CharField('氏名(カナ)',max_length=255) 6 mail = models.EmailField('社内アドレス',max_length=255)

views.py

1class IndexView(LoginRequiredMixin, generic.ListView): 2 paginate_by = 20 3 template_name = 'app/index.html' 4 model = InfoModelForm 5 def post(self, request, *args, **kwargs): 6 form_value = [ 7 self.request.POST.get('employeenumber', None), 8 self.request.POST.get('name', None), 9 self.request.POST.get('mail', None), 10 ] 11 request.session['form_value'] = form_value 12 # 検索時にページネーションに関連したエラーを防ぐ 13 self.request.GET = self.request.GET.copy() 14 self.request.GET.clear() 15 return self.get(request, *args, **kwargs) 16 def get_context_data(self, **kwargs): 17 context = super().get_context_data(**kwargs) 18 # sessionに値がある場合、その値をセットする。(ページングしてもform値が変わらないように) 19 employeenumber = '' 20 name = '' 21 mail = '' 22 if 'form_value' in self.request.session: 23 form_value = self.request.session['form_value'] 24 employeenumber = form_value[0] 25 name = form_value[1] 26 mail = form_value[3] 27 default_data = {'employeenumber': employeenumber, # 社員番号 28 'name': name, # 氏名 29 'mail': mail, # 自レベル所属名称 30 } 31 test_form = AccountSearchForm(initial=default_data) # 検索フォーム 32 context['test_form'] = test_form 33 return context 34 def get_queryset(self): 35 # sessionに値がある場合、その値でクエリ発行する。 36 if 'form_value' in self.request.session: 37 form_value = self.request.session['form_value'] 38 employeenumber = form_value[0] 39 name = form_value[1] 40 mail = form_value[2] 41 # 検索条件 42 condition_employeenumber = Q() 43 condition_name = Q() 44 condition_mail = Q() 45 if len(employeenumber) != 0 and employeenumber[0]: 46 condition_employeenumber = Q(employeenumber__icontains=employeenumber) 47 if len(name) != 0 and name[0]: 48 condition_name = Q(name__contains=name) 49 if len(mail) != 0 and mail[0]: 50 condition_mail = Q(mail__contains=mail) 51 return InfoModelForm.objects.select_related().filter(condition_employeenumber & condition_name & condition_mail) 52 else: 53 # 何も返さない 54 return InfoModelForm.objects.none()

employeenumber、nameのみの場合は
エラーが出ず正常に表示されるのですが、
mailを追加するとエラーになります。

mailインデックスがDBに無いのでしょうか?
確認する方法等ございましたらご教示ください。

初歩的な質問で申し訳ございませんが、
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tetsunosuke

2019/05/13 04:41

> mail = form_value[2] です。 と書いてますが、載せているコードは form_value[3] になってます。どちらが正しいのでしょうか。
退会済みユーザー

退会済みユーザー

2019/05/13 04:46

失礼致しました。 mail = form_value[2] が正しいです。
tetsunosuke

2019/05/13 05:09

だとしたらあってそうには見えますけどね・・・ セッションの内容はちゃんと置き換わっていますか? (一度セッションデータかクッキー側を消してみてやりなおしては?) form_value = self.request.session['form_value'] この内容を出してみて、どうなっているか確認してみましょう。
退会済みユーザー

退会済みユーザー

2019/05/14 01:47

サーバー再起動で解決しました。 大変助かりました。ありがとうございます。
guest

回答1

0

ベストアンサー

サーバー再起動により解決いたしました。

投稿2019/05/15 06:01

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問