web-dev-qa-db-fra.com

TypeError: l'argument int () doit être une chaîne ou un nombre, pas 'datetime.datetime'

J'ai créé le module App12/models.py comme:

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

Ensuite, je lance les cmds

 python manage.py makemigrations App12
 python manage.py migrate

puis entrez 2 enregistrements dans le modèle de question comme suit:

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

Ensuite, je me rends compte que les modèles Question et Choix doivent être en relation de clé étrangère et décommenter la déclaration commentée ci-dessus dans le code des modèles

Quand je lance le "python manage.py makemigrations App12 ", ça fonctionne bien mais après ça, je reçois le

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

erreur lorsque j'exécute la commande "python manage.py migrate".

Quelqu'un peut-il m'aider? Comment puis-je ajouter une relation de clé étrangère entre le modèle Choix et le modèle Question maintenant.

11
Jagat

À partir de votre fichier de migration, il est normal que vous obteniez cette erreur, vous essayez de stocker un datetime sur une clé étrangère qui doit être un int.

Cela se produit lorsque la migration vous a demandé quelle valeur sera définie pour les anciennes lignes Choice car la nouvelle ForeignKey est requise.

Pour le résoudre, vous pouvez changer le fichier de migration et changer le datetime.date ... en un identifiant valide de la table de questions comme le code ci-dessous. Ou supprimez le fichier de migration et réexécutez ./manage.py makemigrations, lorsque vous serez invité à indiquer la valeur par défaut Demander un identifiant de question valide, pas une date/heure.

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 ne doit pas être une chaîne. Créez votre objet comme suit:

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