2016-05-03 15 views
1

Ich habe bereits ein eigenes Modell mit OneToOneField mit User-Modell erstellt. Jetzt möchte ich Feld zu diesem Modell hinzufügen, aber tun manage.py makemigrations und migrate sieht keine Änderungen, die ich zu meinem models.py gemacht habe.Hinzufügen von Feldern zu bestehenden Modell funktioniert nicht in Django

models.py:

class UserDetails(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE,) 
    footsize = models.CharField(max_length=10) 
    headsize = models.CharField(max_length=10) 

    handsize = models.CharField(max_length=100) #field what I want to add 

    def __str__(self): 
     return u'%s %s %s' % (self.id, self.footsize, self.headsize) 

Wenn ich versuche, Werte hinzuzufügen, mit Shell Handgröße, erhalte ich eine Fehlermeldung, dass die Handgröße Feld existiert nicht. Was ist das Problem?

+0

ist dies die erste Migration für diese App? – Sayse

+0

hast du die app in django einstellungen unter 'installed_apps' hinzugefügt? – r3ign

+0

@ r3ign Ja, ich habe – MMakela

Antwort

2

Ich getestet, um das gleiche wie in meiner Frage mit meinem Backup zu tun. Terminal zeigt diese Nachricht, wenn makemigrations tut:

You are trying to add a non-nullable field 'handsize' to userdetails 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: 

Ich bin sicher, dass ich früher mit 1) beantwortet, so dass deshalb Feld nicht in der Datenbank zeigte. So, jetzt antwortete ich 2) und hinzugefügt Standardwert auf das Feld:

handsize = models.CharField(max_length=10, default='40') 

Jetzt migrate Werke und füge Handgröße als neues Feld Datenbank.

0

Wenn Sie sagten, dass Sie bereits ein Modell erstellt haben, gehe ich davon aus, dass Sie anfängliche Migrationen ausgeführt haben. Wenn Sie also nach dem Einfügen neuer Felder erneut Migrationen durchführen, können Sie keine Blanko-Migrationen durchführen. Sie müssen nach Makemigrationen den Namen der App angeben. Etwas wie das.

./manage.py makemigrations app_name 

und die

./manage.py migrate. 

Sollte funktionieren.

Verwandte Themen