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

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

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

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

Django

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

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Q&A

解決済

2回答

1579閲覧

Django で 'str' object has not attribute 'utcoffset' 4時間調べても解決しませんでした。

alizona

総合スコア126

DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

Django

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

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

0グッド

0クリップ

投稿2023/01/26 19:16

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ページで確認できます。

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

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

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

guest

回答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

Sylph

総合スコア2

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

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

0

自己解決

sql

1alter table registration_post add requesteddue DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

投稿2023/01/26 22:36

alizona

総合スコア126

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問