2015-09-07 13 views
8

Ich habe APP12/models.py Modul gemacht wie:Typeerror: int() Argument muss eine Zeichenkette oder eine Zahl sein, nicht 'datetime.datetime'

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 

Dann habe ich die cmds laufen

python manage.py makemigrations App12 
python manage.py migrate 

und geben Sie dann 2 Datensätze in der Frage Modell als:

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

dann merke ich, dass Frage und Wahl-Modelle in Fremdschlüssel Beziehung sein sollten und Kommentar- die oben kommentierte Anweisung in den Modellen Code

Wenn ich die „python manage.py makemigrations App12“ laufen, es gut läuft, aber danach, ich bin immer die

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

Fehler, wenn ich bin mit „Python manage.py migrieren "Befehl.

Kann mir jemand helfen.Wie kann ich jetzt eine Fremdschlüsselrelation zwischen dem Choice-Modell und Question-Modell hinzufügen?

+2

Gibt das Traceback an, wo der Fehler ist? – dietbacon

+0

Was ist das Problem mit dem ForeignKey, den Sie kommentiert haben? – dietbacon

+0

Kein Problem überhaupt. Aber dieses Problem trat auf, als ich Code tat. Zuerst vergaß ich, die Fremdschlüsselbeziehung hinzuzufügen, aber nach einiger Zeit erkannte ich, dass es Fremdschlüsselbeziehung zwischen Frage- und Auswahlmodellen geben sollte. Beim Ausführen des Migrationsbefehls wird jedoch der obige Fehler angezeigt. Warum zeigt es so einen Fehler und wie kann ich dieses Problem loswerden. – Jagat

Antwort

13

Von Ihrem Migrationsdatei ist es normal, dass Sie diese Fehlermeldung erhalten, Sie versuchen, ein Datetime auf einem foreignKey zu speichern, die brauchen ein int zu sein.

Dies ist der Fall, wenn Sie bei der Migration gefragt wurden, welcher Wert für alte Choice-Zeilen festgelegt werden soll, da der neue ForeignKey erforderlich ist.

Um es zu lösen, können Sie die Migrationsdatei ändern und die datetime.date ... in eine gültige ID aus der Fragetabelle wie den folgenden Code ändern. Oder löschen Sie die Migrationsdatei und führen Sie ./manage.py makemigrations erneut aus. Wenn Sie nach dem Standardwert gefragt werden, geben Sie eine gültige Fragen-ID und kein Datum ein.

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,), 
    ] 
+1

Durch das Löschen der Migrationen und das erneute Ausführen von "./manage.py Makemigrationen" wurde ein ähnliches Problem behoben. – Shilpa

2

pub_date sollte keine Zeichenfolge sein. Erstellen Sie Ihr Objekt wie folgt:

from django.utils import timezone 
Question.objects.create(ques_text="How are you?",pub_date=timezone.now()) 
+0

Ja, Sie haben Recht, dass pub_date keine Zeichenfolge in meiner Anweisung sein sollte pub_date = 'timezone.now()' aber sollte mir gefallen: pub_date = timezone.now(), eigentlich wird es versehentlich von mir geschrieben. Trotzdem ist die Frage dieselbe. Kann mir jemand helfen und mir sagen, warum es passiert? – Jagat

+0

Können Sie den Inhalt der Dateien in App12/Migrationen angeben? Ich vermute, Sie haben falsche Migrationen generiert. –

+0

aus __future__ import unicode_literals aus django.db import Modellen, Migration import DATETIME Klasse Migration (migrations.Migration): Abhängigkeiten = [ ('APP11', '0003_remove_choice_question'), ] Operationen = [ Migrationen.AddField ( modellname = 'wahl', name = 'frage', feld = models.ForeignKey (default = datetime.date (2015, 9, 7), zu = 'App11.Question'), preserve_default = False, ), ] – Jagat

Verwandte Themen