web-dev-qa-db-ja.com

TypeError:int()引数は「datetime.datetime」ではなく、文字列または数値でなければなりません

App12/models.pyモジュールを次のように作成しました:

from Django.db import models

class Question(models.Model):

    ques_text=models.CharField(max_length=300)
    pub_date=models.DateTimeField('Published date')

    def __str__(self):
        return self.ques_text

class Choice(models.Model):

    # question=models.ForeignKey(Question)
    choice_text=models.CharField(max_length=300)
    votes=models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text

次に、cmdsを実行します

 python manage.py makemigrations App12
 python manage.py migrate

次に、質問モデルに2つのレコードを次のように入力します。

Question.objects.create(ques_text="How are you?",pub_date='timezone.now()') 
                 # and (ques_text="What are you doing?",pub_date='timezone.now()')

次に、質問と選択モデルは外部キー関係にある必要があることを認識し、モデルコードの上記のコメントのコメントを外します

python manage.py makemigrations App12 "、それは正常に動作していますが、その後、私は

"TypeError: int() argument must be a string or a number, not 'datetime.datetime"

「python manage.py migrate」コマンドを実行するとエラーが発生します。

誰かが私を助けてくれますか?選択モデルと質問モデルの間に外部キー関係を追加するにはどうすればよいですか?.

11
Jagat

移行ファイルからこのエラーが発生するのは通常のことであり、int型である必要があるForeignkeyに日時を格納しようとしています。

これは、新しいForeignKeyが必要なために移行が古い選択肢行に設定する値を尋ねたときに発生します。

これを解決するには、移行ファイルを変更し、datetime.date ...を次のコードのような質問テーブルからの有効なIDに変更します。または、移行ファイルを削除して./manage.py makemigrationsを再実行します。デフォルト値について尋ねられたら、日時ではなく有効な質問IDを要求します。

from future import unicode_literals
from Django.db import models, migrations
import datetime

class Migration(migrations.Migration):
    dependencies = [ ('App11', '0003_remove_choice_question'), ]
    operations = [
        migrations.AddField(
            model_name='choice',
            name='question',
            field=models.ForeignKey(default=1, to='App11.Question'), preserve_default=False, ),
    ]
16
Mounir

pub_dateは文字列であってはなりません。次のようにオブジェクトを作成します。

from Django.utils import timezone
Question.objects.create(ques_text="How are you?",pub_date=timezone.now()) 
2
Régis B.