Django で、現在時刻を取得して、 datetime fieldと比較したいです。
下記のようなエラーがでます。
データベースの初期値がstringになってるという記事を見たので、確認したのですが、全て date型でした。
python
1def frontpage(request): 2 posts = Post.objects.all() 3 aproved_status = Status.objects.get(status="aproved") 4 pastdue_status = Status.objects.get(status="pastdue") 5 requested_status = Status.objects.get(status="requested") 6 # u = datetime.utcnow() 7 # u = u.replace(tzinfo=pytz.utc) 8 # now=u.astimezone(pytz.timezone("Asia/Manila")) 9 now=datetime.now().replace(tzinfo=timezone(offset=timedelta())) 10 11 for post in posts: #<----- line 51 error occur 12 if post.status!=aproved_status and post.status!=pastdue_status: 13 if post.due < now: 14 if post.status!=requested_status: 15 post.status=pastdue_status 16 post.save()
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答2件
0
SQLite3からMySQLにCSV経由(DBeaver 23.0.1)でマイグレーションをする際にも同じエラーメッセージが出てくる模様です。
PS
1Traceback (most recent call last): 2 File "C:\Users\○○○\OneDrive\ドキュメ 3ント\Python_Scripts\sample\manage.py", line 22, in <module> 4 main() 5 File "C:\Users\○○○\OneDrive\ドキュメ 6ント\Python_Scripts\sample\manage.py", line 18, in main 7 execute_from_command_line(sys.argv) 8 File "C:\Users\○○○\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\management\__init__.py", line 446, in execute_from_command_line 9 utility.execute() 10 File "C:\Users\○○○\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\management\__init__.py", line 440, in execute 11 self.fetch_command(subcommand).run_from_argv(self.argv) 12 File "C:\Users\○○○\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\management\base.py", line 402, 13in run_from_argv 14 self.execute(*args, **cmd_options) 15 File "C:\Users\○○○\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\management\base.py", line 443, 16in execute 17 self.check() 18 File "C:\Users\○○○\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\management\base.py", line 475, 19in check 20 all_issues = checks.run_checks( 21 File "C:\Users\○○○\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\checks\registry.py", line 88, in run_checks 22 new_errors = check(app_configs=app_configs, databases=databases) 23 File "C:\Users\○○○\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\checks\urls.py", line 14, in check_url_config 24 return check_resolver(resolver) 25 File "C:\Users\○○○\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\checks\urls.py", line 24, in check_resolver 26 return check_method() 27 File "C:\Users\○○○\AppData\Local\Programs\Python\Python39\lib\site-packages\django\urls\resolvers.py", line 494, in check 28 for pattern in self.url_patterns: 29 File "C:\Users\○○○\AppData\Local\Programs\Python\Python39\lib\site-packages\django\utils\functional.py", line 57, in __get__ 30 res = instance.__dict__[self.name] = 31self.func(instance) 32 File "C:\Users\○○○\AppData\Local\Programs\Python\Python39\lib\site-packages\django\urls\resolvers.py", line 715, in url_patterns 33 patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) 34 File "C:\Users\○○○\AppData\Local\Programs\Python\Python39\lib\site-packages\django\utils\functional.py", line 57, in __get__ 35 res = instance.__dict__[self.name] = 36self.func(instance) 37 File "C:\Users\○○○\AppData\Local\Programs\Python\Python39\lib\site-packages\django\urls\resolvers.py", line 708, in urlconf_module 38 return import_module(self.urlconf_name) 39 File "C:\Users\○○○\AppData\Local\Programs\Python\Python39\lib\importlib\__init__.py", line 127, in import_module 40 return _bootstrap._gcd_import(name[level:], package, level) 41 File "<frozen importlib._bootstrap>", line 1030, in _gcd_import 42 File "<frozen importlib._bootstrap>", line 1007, in _find_and_load 43 File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked 44 File "<frozen importlib._bootstrap>", line 680, in _load_unlocked 45 File "<frozen importlib._bootstrap_external>", line 790, in exec_module 46 File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed 47 File "C:\Users\○○○\OneDrive\ドキュメ 48ント\Python_Scripts\sample\sample\urls.py", line 21, in <module> 49 from accounts import views 50 File "C:\Users\○○○\OneDrive\ドキュメ 51ント\Python_Scripts\sample\accounts\views.py", line 42, in <module> 52 from .forms import (SignUpForm, LoginForm, 53 File "C:\Users\○○○\OneDrive\ドキュメ 54ント\Python_Scripts\sample\accounts\forms.py", line 558, in <module> 55 class Send_preset_Form(forms.Form): 56 File "C:\Users\○○○\OneDrive\ドキュメ 57ント\Python_Scripts\sample\accounts\forms.py", line 562, in Send_preset_Form 58 choice_sender = [(Contents.id, Contents.username) for Contents in User.objects.all()] 59 File "C:\Users\○○○\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\models\query.py", line 394, in __iter__ 60 self._fetch_all() 61 File "C:\Users\○○○\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\models\query.py", line 1866, in _fetch_all 62 self._result_cache = list(self._iterable_class(self)) 63 File "C:\Users\○○○\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\models\query.py", line 117, in __iter__ 64 for row in compiler.results_iter(results): 65 File "C:\Users\○○○\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\models\sql\compiler.py", line 1333, in apply_converters 66connection) 67 File "C:\Users\○○○\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\backends\mysql\operations.py", line 331, in convert_datetimefield_value 68 value = timezone.make_aware(value, self.connection.timezone) 69 File "C:\Users\○○○\AppData\Local\Programs\Python\Python39\lib\site-packages\django\utils\timezone.py", line 290, in make_aware 70 if is_aware(value): 71 File "C:\Users\○○○\AppData\Local\Programs\Python\Python39\lib\site-packages\django\utils\timezone.py", line 256, in is_aware 72 return value.utcoffset() is not None 73AttributeError: 'str' object has no attribute 'utcoffset'
データ転送先のテーブルを1つずつ検証した結果、カラム名「last_login」のデータタイプが文字列型に設定されていることが原因でした。
mysql>
1+-------------------+--------------+------+-----+---------+-------+ 2| Field | Type | Null | Key | Default | Extra | 3+-------------------+--------------+------+-----+---------+-------+ 4| id | int | YES | | NULL | | 5| password | varchar(128) | YES | | NULL | | 6| last_login | varchar(50) | YES | | NULL | | 7| is_superuser | int | YES | | NULL | | 8| username | varchar(50) | YES | | NULL | | 9| email | varchar(50) | YES | | NULL | | 10| is_active | int | YES | | NULL | | 11| is_staff | int | YES | | NULL | | 12| icon | varchar(50) | YES | | NULL | | 13| account | varchar(50) | YES | | NULL | | 14| bussiness_content | varchar(50) | YES | | NULL | | 15| companyname | varchar(50) | YES | | NULL | | 16| department | varchar(50) | YES | | NULL | | 17| industry | varchar(50) | YES | | NULL | | 18| position | varchar(50) | YES | | NULL | | 19| url | varchar(50) | YES | | NULL | | 20+-------------------+--------------+------+-----+---------+-------+
他のテーブル(カラム名:date_time)も同様に文字列型で設定されていましたので下記スクリプトを実行
sql
1ALTER TABLE db_mysql.accounts_post MODIFY COLUMN date_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP;
色々調べて気づいたら朝までかかってしまいましたが、無事にマイグレーションできて良かったです。データ型の種類には気をつけましょう。
PS
1Migrations for 'accounts': 2 accounts\migrations\0022_alter_post_date_time_alter_post_1_date_time_and_more.py - Alter field date_time on post 3 - Alter field date_time on post_1 4 - Alter field date_time on post_2 5PS C:\Users\○○○\OneDrive\ドキュメント\Python_Scripts\sample> python manage.py migrate 6Operations to perform: 7 Apply all migrations: accounts, admin, 8app, auth, contenttypes, sessions 9Running migrations: 10 Applying accounts.0022_alter_post_date_time_alter_post_1_date_time_and_more... OK
投稿2023/04/07 19:11
総合スコア2
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。