前提
Python+Django+SQLiteで予約アプリを作成いたしました。
Anacondaを使ったPC上では正常に動作しているのですが、
Xserverにアップロードすると、予約画面(DBへの書き込み)で
「'int' object has no attribute '〇〇〇'」というエラーが発生します。
それぞれのバージョンは、
【PC】
Windows
Anaconda
Python 3.12.3
Django 5.1.3
Sqlite 3.45.3
【Xserver】
LinuxOS
Anaconda
Python 3.12.3
Django 5.1.3
Sqlite 3.47.0
です。
パソコン側では正常に動作しています。
発生している問題・エラーメッセージ
AttributeError at /test_app/yoyaku_end/ 'int' object has no attribute 'class_date' Request Method: POST Request URL: https://test.jp/test_app/yoyaku_end/ Django Version: 5.1.3 Exception Type: AttributeError Exception Value: 'int' object has no attribute 'class_date' Exception Location: /test_app/views.py, line 160, in yoyaku_end Raised during: test_app.views.yoyaku_end Python Executable: /home/xxxxxx/anaconda3/bin/python Python Version: 3.12.3 Python Path: ['/home/xxxxxx/yamamotoweb.jp/public_html/aaa', '/home/xxxxxx/anaconda3/lib/python312.zip', '/home/xxxxxx/anaconda3/lib/python3.12', '/home/xxxxxx/anaconda3/lib/python3.12/lib-dynload', '/home/xxxxxx/anaconda3/lib/python3.12/site-packages', '/home/xxxxxx/test.jp/public_html/my_project/']
該当のソースコード
views.py
1 2#クラスリスト(予約リスト) 3@login_required 4def class_list(request): 5 global num 6 posts = ClassName.objects.all() #すべて 7 data_page = Paginator(posts, 5) # Paginatorオブジェクト生成 1ページに5件表示 8 p = request.GET.get('p') # URLのパラメータから現在のページ番号を取得 9 articles = data_page.get_page(p) # 指定のページのArticleを取得 10 return render(request, 'test_app/class_list.html', {'articles': articles}) 11 12#予約確認 13@login_required 14def yoyaku_kakunin(request,post_id,*args, **kwargs): 15 global t_bool,post 16 post = ClassName.objects.get(pk = post_id) 17 18 if request.method == "POST": 19 t_bool = request.POST["transfer"] 20 return redirect('test_app:yoyaku_end') 21 return render(request,"test_app/yoyaku_kakunin.html",{"post":post}) 22 23#予約エンド 24@login_required 25def yoyaku_end(request): 26 global t_bool,post 27 user = request.user #ログインユーザー取得 28 post_flag = 0 29 posts = ReserveList.objects.filter(username_id = user.id) 30 31 for p in posts: 32 if p.classname_id == post: 33 post_flag = 1 34 print("すでに登録済みです") 35 36 if p.classname_id.class_date == post.class_date and p.classname_id.class_start_time == post.class_start_time: 37 post_flag = 2 38 print("同じ時間に予約がありますが、予約しますか?") 39 40 if post_flag == 0: #予約する 41 ReserveList.objects.create(username_id = user.id, classname_id = post, transfer = t_bool) #ReserveList 追加 42 43 return render(request,'test_app/yoyaku_end.html',{"post_flag":post_flag}) # 呼び出す Template 44 45
models.py
1from django.db import models 2 3# Create your models here. 4class ClassNo(models.Model): 5 class_name = models.CharField('クラス名', max_length=15, blank=True, null=True) 6 class_hurigana = models.CharField('ふりがな', max_length=30, blank=True, null=True) 7 def __str__(self): 8 return self.class_name 9 10class ClassManager(models.Model): 11 class_manager = models.CharField('担当', max_length=30, blank=True, null=True) 12 manager_hurigana = models.CharField('ふりがな', max_length=30, blank=True, null=True) 13 def __str__(self): 14 return self.class_manager 15 16class ClassName(models.Model): 17 class_id = models.ForeignKey(ClassNo, on_delete=models.PROTECT, blank=True, null=True,verbose_name= ('クラス名')) 18 class_date = models.DateField('日付', max_length=15, blank=True, null=True) 19 class_start_time = models.TimeField('開始時間', max_length=15,blank=True, null=True) 20 class_end_time = models.TimeField('終了時間', max_length=15,blank=True, null=True) 21 class_manager = models.ForeignKey(ClassManager, on_delete=models.CASCADE, blank=True, null=True,verbose_name= ('担当')) 22 def __int__(self): 23 return self.class_id 24 25class UserName(models.Model): 26 user_name = models.CharField('ユーザーID', max_length=15,blank=True, null=True) 27 user_pass = models.CharField('パスワード', max_length=15,blank=True, null=True) 28 affiliation = models.CharField('所属', max_length=15,blank=True, null=True) 29 30class ReserveList(models.Model): 31 username_id = models.IntegerField('ユーザー番号', blank=True, null=True) 32 classname_id = models.ForeignKey(ClassName, on_delete=models.CASCADE, blank=True, null=True, verbose_name= ('予約クラス')) 33 transfer = models.BooleanField(verbose_name = '送迎あり') 34
試したこと
・PC側とXseverのバージョンを揃えた。
・データベースの中身を一度空にして、再度登録しなおした。
補足情報(FW/ツールのバージョンなど)
”class_date”は、開催予定教室の日付が入っています。2024-11-11といった形式です。
日付の部分のエラーなのかと思ったのですが、あまり思い当たることが見つからず、お手上げ状態です。
何卒よろしくお願いいたします。
補足情報(Xserverのエラーログの情報)
Internal Server Error: /test_app/yoyaku_end/: /home/xs6xxxxxx/testweb.jp/public_html/xxx/index.cgi, referer: https://xxx.xxxxxx.jp/test_app/class_list/22/ Traceback (most recent call last):: /home/xs6xxxxxx/testweb.jp/public_html/xxx/index.cgi, referer: https://xxx.xxxxxx.jp/test_app/class_list/22/ File "/home/xs6xxxxxx/anaconda3/lib/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner: /home/xs6xxxxxx/testweb.jp/public_html/xxx/index.cgi, referer: https://xxx.xxxxxx.jp/test_app/class_list/22/ response = get_response(request): /home/xs6xxxxxx/testweb.jp/public_html/xxx/index.cgi, referer: https://xxx.xxxxxx.jp/test_app/class_list/22/ ^^^^^^^^^^^^^^^^^^^^^: /home/xs6xxxxxx/testweb.jp/public_html/xxx/index.cgi, referer: https://xxx.xxxxxx.jp/test_app/class_list/22/ File "/home/xs6xxxxxx/anaconda3/lib/python3.12/site-packages/django/core/handlers/base.py", line 197, in _get_response: /home/xs6xxxxxx/testweb.jp/public_html/xxx/index.cgi, referer: https://xxx.xxxxxx.jp/test_app/class_list/22/ response = wrapped_callback(request, *callback_args, **callback_kwargs): /home/xs6xxxxxx/testweb.jp/public_html/xxx/index.cgi, referer: https://xxx.xxxxxx.jp/test_app/class_list/22/ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^: /home/xs6xxxxxx/testweb.jp/public_html/xxx/index.cgi, referer: https://xxx.xxxxxx.jp/test_app/class_list/22/ File "/home/xs6xxxxxx/anaconda3/lib/python3.12/site-packages/django/contrib/auth/decorators.py", line 60, in _view_wrapper: /home/xs6xxxxxx/testweb.jp/public_html/xxx/index.cgi, referer: https://xxx.xxxxxx.jp/test_app/class_list/22/ return view_func(request, *args, **kwargs): /home/xs6xxxxxx/testweb.jp/public_html/xxx/index.cgi, referer: https://xxx.xxxxxx.jp/test_app/class_list/22/ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^: /home/xs6xxxxxx/testweb.jp/public_html/xxx/index.cgi, referer: https://xxx.xxxxxx.jp/test_app/class_list/22/ File "/home/xs6xxxxxx/testweb.jp/public_html/xxx/test_app/views.py", line 161, in yoyaku_end: /home/xs6xxxxxx/testweb.jp/public_html/xxx/index.cgi, referer: https://xxx.xxxxxx.jp/test_app/class_list/22/ if p.classname_id.class_date == post.class_date and p.classname_id.class_start_time == post.class_start_time:: /home/xs6xxxxxx/testweb.jp/public_html/xxx/index.cgi, referer: https://xxx.xxxxxx.jp/test_app/class_list/22/ ^^^^^^^^^^^^^^^: /home/xs6xxxxxx/testweb.jp/public_html/xxx/index.cgi, referer: https://xxx.xxxxxx.jp/test_app/class_list/22/ AttributeError: 'int' object has no attribute 'class_date': /home/xs6xxxxxx/testweb.jp/public_html/xxx/index.cgi, referer: https://xxx.xxxxxx.jp/test_app/class_list/22/