TypeError: int() argument doit être une chaîne, un octets, comme objet ou un nombre, et non pas " datetime.datetime'
J'essaie d'ajouter une "created_at' pour tous mes modèles et je reçois le message d'erreur suivant...
TypeError: int() argument must be a string, a bytes-like object or a number, not 'datetime.datetime'
Dans l'ordre, c'est mon flux de travail...
1) j'ai mis created_at = models.DateTimeField(auto_now_add=True)
dans mes modèles.
2) - je exécuter python manage.py makemigrations
et il affiche l'invite suivante s'affiche dans ma ligne de commande...
You are trying to add a non-nullable field 'created_at' to comment without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows)
2) Quit, and let me add a default in models.py
Select an option: 1
Please enter the default value now, as valid Python
The datetime and django.utils.timezone modules are available, so you can do e.g. timezone.now()
3) À ce stade, je tape dans timezone.now()
sur tous les modèles et lorsque vous avez terminé avec succès crée les migrations fichier pour moi.
4) - je exécuter python manage.py migrate
et obtenir le TypeError
message affiché ci-dessus.
Choses que j'ai essayé...
1) la Recherche par le biais de Débordement de Pile pour des problèmes similaires (en vain)...
2) Deleteing les migrations de fichier et d'essayer d'utiliser datetime.datetime.now()
3) Deleteing les migrations de fichier et d'essayer d'utiliser la simple entier 1
.
Toutes ces tentatives ont été infructueuses.
Ligne de commande complet traceback...
(env)alopex@Alopex:~/repos/hacker_news$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, sessions, hackernews, contenttypes
Running migrations:
Rendering model states... DONE
Applying hackernews.0003_auto_20151226_1701...Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/alopex/repos/hacker_news/env/lib/python3.4/site-packages/django/core/management/__init__.py", line 350, in execute_from_command_line
utility.execute()
File "/home/alopex/repos/hacker_news/env/lib/python3.4/site-packages/django/core/management/__init__.py", line 342, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/alopex/repos/hacker_news/env/lib/python3.4/site-packages/django/core/management/base.py", line 348, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/alopex/repos/hacker_news/env/lib/python3.4/site-packages/django/core/management/base.py", line 399, in execute
output = self.handle(*args, **options)
File "/home/alopex/repos/hacker_news/env/lib/python3.4/site-packages/django/core/management/commands/migrate.py", line 200, in handle
executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
File "/home/alopex/repos/hacker_news/env/lib/python3.4/site-packages/django/db/migrations/executor.py", line 92, in migrate
self._migrate_all_forwards(plan, full_plan, fake=fake, fake_initial=fake_initial)
File "/home/alopex/repos/hacker_news/env/lib/python3.4/site-packages/django/db/migrations/executor.py", line 121, in _migrate_all_forwards
state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
File "/home/alopex/repos/hacker_news/env/lib/python3.4/site-packages/django/db/migrations/executor.py", line 198, in apply_migration
state = migration.apply(state, schema_editor)
File "/home/alopex/repos/hacker_news/env/lib/python3.4/site-packages/django/db/migrations/migration.py", line 123, in apply
operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
File "/home/alopex/repos/hacker_news/env/lib/python3.4/site-packages/django/db/migrations/operations/fields.py", line 62, in database_forwards
field,
File "/home/alopex/repos/hacker_news/env/lib/python3.4/site-packages/django/db/backends/base/schema.py", line 382, in add_field
definition, params = self.column_sql(model, field, include_default=True)
File "/home/alopex/repos/hacker_news/env/lib/python3.4/site-packages/django/db/backends/base/schema.py", line 145, in column_sql
default_value = self.effective_default(field)
File "/home/alopex/repos/hacker_news/env/lib/python3.4/site-packages/django/db/backends/base/schema.py", line 210, in effective_default
default = field.get_db_prep_save(default, self.connection)
File "/home/alopex/repos/hacker_news/env/lib/python3.4/site-packages/django/db/models/fields/related.py", line 910, in get_db_prep_save
return self.target_field.get_db_prep_save(value, connection=connection)
File "/home/alopex/repos/hacker_news/env/lib/python3.4/site-packages/django/db/models/fields/__init__.py", line 728, in get_db_prep_save
prepared=False)
File "/home/alopex/repos/hacker_news/env/lib/python3.4/site-packages/django/db/models/fields/__init__.py", line 968, in get_db_prep_value
value = self.get_prep_value(value)
File "/home/alopex/repos/hacker_news/env/lib/python3.4/site-packages/django/db/models/fields/__init__.py", line 976, in get_prep_value
return int(value)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'datetime.datetime'
Plein de fichier de migration...
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2015-12-26 17:01
from __future__ import unicode_literals
import datetime
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
from django.utils.timezone import utc
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('hackernews', '0002_auto_20151224_1605'),
]
operations = [
migrations.AddField(
model_name='comment',
name='created_at',
field=models.DateTimeField(auto_now_add=True, default=datetime.datetime(2015, 12, 26, 17, 1, 23, 211181, tzinfo=utc)),
preserve_default=False,
),
migrations.AddField(
model_name='comment',
name='user',
field=models.ForeignKey(default=datetime.datetime(2015, 12, 26, 17, 1, 28, 128127, tzinfo=utc), on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
preserve_default=False,
),
migrations.AddField(
model_name='commentvote',
name='created_at',
field=models.DateTimeField(auto_now_add=True, default=datetime.datetime(2015, 12, 26, 17, 1, 34, 85491, tzinfo=utc)),
preserve_default=False,
),
migrations.AddField(
model_name='post',
name='created_at',
field=models.DateTimeField(auto_now_add=True, default=datetime.datetime(2015, 12, 26, 17, 1, 37, 779457, tzinfo=utc)),
preserve_default=False,
),
migrations.AddField(
model_name='postvote',
name='created_at',
field=models.DateTimeField(auto_now_add=True, default=datetime.datetime(2015, 12, 26, 17, 1, 41, 794803, tzinfo=utc)),
preserve_default=False,
),
]
OriginalL'auteur Erik Åsland | 2015-12-26
Vous devez vous connecter pour publier un commentaire.
Le problème est avec le nouveau
ForeignKey
:Clairement la valeur par défaut est faux. Je pense que vous l'avez inséré par erreur.
Vous devez spécifier la clé primaire d'un utilisateur, ou de donner un
User
objet.OriginalL'auteur Andrea Corbellini
J'ai eu un problème similaire et je voudrais partager comment j'ai résolu ce problème car il peut profiter à d'autres. Cela a été un défi à résoudre avec le peu d'informations spécifiques à partir de la documentation de Django et ce fil semble être le meilleur-libellé de la question sur stackoverflow.
Ma situation:
Ma solution:
J'accepte que mon approche est un peu un hack, mais cela a fonctionné pour moi, et aussi sans endommager mes modèles qui ont tous été créés à la perfection, je n'ai également corrigé le manque de la valeur par défaut qui a été à l'origine du problème qui était une erreur de la mine, à entrer dans un char par défaut pour un champ de type entier. Cependant, il peut y avoir des effets secondaires, si vous êtes plus loin dans votre développement et j'aimerais avoir des suggestions sur une approche plus sûre à ce problème.
OriginalL'auteur Roger Layton
Aucune de ces solutions ne fonctionne pour moi. Mais quand je retiré tous les fichiers de migrations dossier dans mon dossier app dans le projet et a couru
python manage.py migrate
, tout a bien fonctionné et il n'y avait plus de problèmes.OriginalL'auteur Alex Jolig
Que j'ai rencontré le même problème, j'ai essayé comme suggéré ci-dessus et j'ai supprimé seulement mon fichier de migration qui est à l'origine de ce problème (le dernier fichier créé lors de l'application de
python manage.py makemigrations
), je l'ai de nouveau exécuterpython manage.py makemigrations
, ici je remarque que précédemment j'ai donné>>> timezone.now()
en tant que par défaut pour le Champ ForeignKey, cette fois j'ai mis valeur par défaut dans mon models.py fichier et mon problème a été résolu.Remarque: ne pas fournir des valeurs par défaut pour les clés étrangères lors de la migration.
OriginalL'auteur Kumar Raja