2017-02-20 3 views
0

Bis heute bekam ich meine Modelle wie folgt aus:Django Modelle Dezimal Quantisierungsraster Ergebnis hat zu viele Ziffern für aktuellen Kontext

class Ambiente1m(models.Model): 
    Zona = models.CharField(max_length=10,default=0) 
    Timestamp = models.DateTimeField(default=datetime.datetime.now) 
    Temperatura1 = models.IntegerField() 
    Humedad1 = models.IntegerField() 

aber ich versuchte Temperatura und Humedad als Decimal (4,2) und Zugabe von 2 zu erhalten Weitere Spalten dazu:

class Ambiente1m(models.Model): 
    Zona = models.CharField(max_length=10,default=0) 
    Timestamp = models.DateTimeField(default=datetime.datetime.now) 
    Temperatura1 = models.DecimalField(max_digits=4, decimal_places=2) 
    Humedad1 = models.DecimalField(max_digits=4, decimal_places=2) 
    Temperatura2 = models.DecimalField(max_digits=4, decimal_places=2) 
    Humedad2 = models.DecimalField(max_digits=4, decimal_places=2) 

Hinzufügen von Standardwerten für Humedad -1 und 99,99 für Temperatura.

Dann habe ich die Python-manage.py Makemigrationen und migrieren. erhalte ich die folgende Spur:

python manage.py migrate 
Operations to perform: 
    Apply all migrations: admin, contenttypes, sessions, auth, SmartFICApp 
Running migrations: 
    Applying SmartFICApp.0017_auto_20170220_1830...Traceback (most recent call las   t): 
    File "manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.p   y", line 353, in execute_from_command_line 
    utility.execute() 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.p   y", line 345, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py",   line 348, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py",   line 399, in execute 
    output = self.handle(*args, **options) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/m   igrate.py", line 200, in handle 
    executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/executor.py"   , line 92, in migrate 
    self._migrate_all_forwards(plan, full_plan, fake=fake, fake_initial=fake_ini   tial) 
    File "/usr/local/lib/python2.7/dist-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 "/usr/local/lib/python2.7/dist-packages/django/db/migrations/executor.py"   , line 198, in apply_migration 
    state = migration.apply(state, schema_editor) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/migration.py   ", line 123, in apply 
    operation.database_forwards(self.app_label, schema_editor, old_state, projec   t_state) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/operations/f   ields.py", line 62, in database_forwards 
    field, 
    File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/schema.py   ", line 382, in add_field 
    definition, params = self.column_sql(model, field, include_default=True) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/schema.py   ", line 145, in column_sql 
    default_value = self.effective_default(field) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/schema.py   ", line 210, in effective_default 
    default = field.get_db_prep_save(default, self.connection) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/__init__.   py", line 1612, in get_db_prep_save 
    self.max_digits, self.decimal_places) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/operation   s.py", line 493, in adapt_decimalfield_value 
    return utils.format_number(value, max_digits, decimal_places) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/backends/utils.py", lin   e 200, in format_number 
    value = value.quantize(decimal.Decimal(".1") ** decimal_places, context=cont   ext) 
    File "/usr/lib/python2.7/decimal.py", line 2469, in quantize 
    'quantize result has too many digits for current context') 
    File "/usr/lib/python2.7/decimal.py", line 3873, in _raise_error 
    raise error(explanation) 
decimal.InvalidOperation: quantize result has too many digits for current context 

Das Problem ist, habe ich versucht, models.IntegerField() Version zu erhalten:

class Ambiente1m(models.Model): 
    Zona = models.CharField(max_length=10,default=0) 
    Timestamp = models.DateTimeField(default=datetime.datetime.now) 
    Temperatura1 = models.IntegerField() 
    Humedad1 = models.IntegerField() 
    Temperatura2 = models.IntegerField() 
    Humedad2 = models.IntegerField() 

Im mit PostgreSQL.

Aber ich bekomme den gleichen Fehler, decimal.InvalidOperation: Quantisierung Ergebnis hat zu viele Ziffern für den aktuellen Kontext egal was ich tue, es funktioniert nicht. Ich verwende kein DecimalField in meinem Code.

Vielen Dank!

+0

Vielleicht enthält Ihre Datenbank Daten, die nicht den Einschränkungen Ihrer Felder entsprechen? Es klingt wie es ... – Bakuriu

+0

Ich habe die Tabellen abgeschnitten. – Shaderlolz

+0

Können Sie die Migrationsdatei anzeigen? – Bakuriu

Antwort

0

Das Problem war, dass Django versuchte, eine alte Version der Migrationsdatei anstelle der neuen zu migrieren. Ich weiß nicht warum.

Ich habe diese Bearbeitung dieser Datei mit neuer Anpassung gelöst und die .pyc-Datei gelöscht, die zwang, sie neu zu laden.

Verwandte Themen