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

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

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

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

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Python

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

Q&A

0回答

826閲覧

djangoのモデル作成で発生したエラーを解決したい(timestamp)

seyu0930

総合スコア20

Django

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

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Python

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

0グッド

0クリップ

投稿2021/09/15 06:06

編集2021/09/15 07:01

djangoのモデルを作成して、管理サイトで予定を追加しようとすると以下のエラーが出ます。models.pyのscheduleTimeを消去して実行するとうまくいきます。タイムスタンプ?か何かが原因に思うのですが、調べてもよくわかりません。よろしくお願いします。

エラー内容

python

1psycopg2.errors.DatatypeMismatch: column "scheduleTime" is of type integer but expression is of type timestamp with time zone 2LINE 1: ... "schedule", "scheduleTime") VALUES (1, 'お花見', '2021-09-1... 3 ^ 4HINT: You will need to rewrite or cast the expression. 5 6The above exception was the direct cause of the following exception: 7 8 9django.db.utils.ProgrammingError: column "scheduleTime" is of type integer but expression is of type timestamp with time zone 10LINE 1: ... "schedule", "scheduleTime") VALUES (1, 'お花見', '2021-09-1... 11 ^ 12HINT: You will need to rewrite or cast the expression. 13

コード(models.py)

python

1from django.db import models 2from accounts.models import CustomUser 3 4class Calender(models.Model): 5 user = models.ForeignKey(CustomUser, verbose_name="ユーザー", on_delete=models.PROTECT) 6 schedule = models.CharField(verbose_name="予定", max_length=30, null=True, blank=True) 7 #scheduleTime = models.DateTimeField(verbose_name="日にち", auto_now=True) 8 9 class Meta: 10 verbose_name_plural = "予定表"

admin.py

python

1from django.contrib import admin 2 3# Register your models here. 4from calenderApp.models import Calender 5admin.site.register(Calender)

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

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

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

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

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

dameo

2021/09/16 09:20

modelを変更した場合、対応するDBのスキーマも変更が必要な場合があります。 https://docs.djangoproject.com/ja/3.2/topics/migrations/ 今までに行ったDBのスキーマ変更は アプリケーション/migrations/ に格納されています。コマンドラインからは python manage.py showmigrations などで各アプリケーションでのDBスキーマの変更履歴を確認することができます。 例えば上記コマンドで、 calenderApp [X] 0001_initial みたいな出力があれば(多分あると思いますが)、コマンドラインから python manage.py sqlmigrate calenderApp 0001_initial とすれば、calenderAppの初回スキーマ作成時に使用したSQLを見る事ができます。 さて、今回のエラーは psycopg2.errors.DatatypeMismatch: column "scheduleTime" is of type integer but expression is of type timestamp with time zone LINE 1: ... "schedule", "scheduleTime") VALUES (1, 'お花見', '2021-09-1... とあります。scheduleTimeはDB上かアプリ上どちらかがintegerでどちらかがtimestamp with time zoneでアクセスしようとして、うまくマッチしてないということです。 psycopg2はpostgresqlのドライバなので、DBはpostgresqlなのでしょう。psqlが使用できれば当該データベースにアクセスして、 \d calenderApp_calender とすれば、各カラムの定義を見ることが出来ます。そこでscheduleTimeがintegerであれば、DB側が何らかの理由でintegerにしていたということになります。 もしそうなら、この理由は恐らく、modelを変更したにも関わらず、DBのスキーマを変更していないからではないか?と推測します。 もしDBのスキーマを変更していないからなのであれば、コマンドラインから python manage.py makemigrations python manage.py migrate で、DBのスキーマを変更すれば回避できる可能性があります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問