2016-06-09 9 views
2

Hallo hier ist die spezifische Zeile, die ich in models.py hinzugefügtGeändertes Django-Modell. Ich habe einen einmaligen Standardwert = datetime.date für DateField angegeben. Gefunden, dass es ungültig ist. Entfernt das Feld und kann immer noch nicht migrieren

billingMonth2 = models.DateTimeField()

Dies ist, was in makemigrations passiert ist, ich dachte, ich ein nicht nullable Feld hinzugefügt, so habe ich versucht, zu definieren, einen Standardwert: gefunden

You are trying to add a non-nullable field 'billingMonth' to bills 
    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() 
    >>> datetime.date 
    Migrations for 'bills': 
    0007_auto_20160609_1400.py: 
    - Change Meta options on bills 
    - Add field billingMonth to bills 

ich heraus, dass datetime.date ungültig war und kam mit einem Fehler aus

....File "/home/jrbenriquez/Envs/env1/local/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 197, in effective_default 
default = field.get_default() 
    File "/home/jrbenriquez/Envs/env1/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 797, in get_default 
return self.default() 
    TypeError: Required argument 'year' (pos 1) not found 

So entfernte ich nur das billingMonth2 Feld der Hoffnung, es wieder normal gehen und auch einen Standardwert als

`billingMonth2 = models.DateTimeField(default='Test',null=True,blank=True)` 

Einstellung Beide gibt immer noch den gleichen Fehler. Es scheint mir, dass ich etwas in der Meta des Modells in einer anderen Datei oder in der Datenbank geändert habe und dass ich den Standardwert "datetime.date" irgendwo

löschen muss Ich hoffe jemand könnte mir hier helfen. Vielen Dank!

UPDATE: Hier 0007_auto20160609_1400.py

# -*- coding: utf-8 -*- 
    # Generated by Django 1.9.6 on 2016-06-09 14:00 
    from __future__ import unicode_literals 

    from django.db import migrations, models 
    import django.utils.datetime_safe 


    class Migration(migrations.Migration): 

     dependencies = [ 
      ('bills', '0006_bills_duedate'), 
     ] 

     operations = [ 
      migrations.AlterModelOptions(
       name='bills', 
       options={'ordering': ('-id', '-status'),  'verbose_name_plural': 'Bills'}, 
      ), 
      migrations.AddField(
       model_name='bills', 
       name='billingMonth', 
       field=models.DateField(default=django.utils.datetime_safe.date), 
       preserve_default=False, 
      ), 
] 
+0

Können Sie den Inhalt von '0007_auto_20160609_1400.py' in Ihrem Migrationsordner posten? – schwobaseggl

+0

Hallo, ich habe die Frage aktualisiert – RickyJB

Antwort

2
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() 
>>> datetime.date 

Ich denke, es für den Rückgabewert des Verfahrens verlangt, nicht die Methode selbst. Also seine datetime.date() mit der () am Ende.

Auch im Modell der Felddeklaration, können Sie das aktuelle Datum als Standard festgelegt, wenn das, was Sie

billingMonth2 = models.DateTimeField(default=datetime.date, null=True, blank=True) 

Es zu tun versucht, Sie geben die Methode selbst, ohne die (), so dass Die Zeit wird genommen, wenn eine neue Zeile erstellt wird, nicht nur wenn das Modell zum ersten Mal definiert wird.

+0

Danke dafür! Aber alles, was ich jetzt brauche, ist, den Fehler loszuwerden. Obwohl ich das Feld gelöscht habe, erscheint es immer noch. – RickyJB

+0

Nein, im Modell sein * ohne * '()', nur 'datetime.date'. Probieren Sie die Python-Konsole aus, um den Unterschied zwischen "datetime.date" und "datetime.date()" zu erkennen. – C14L

+0

Versucht: billingMonth2 = models.DateTimeField (default = datetime.date, null = True, leer = True) Immer noch bekomme ich den gleichen Fehler, wenn ich migrieren. – RickyJB