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!
Vielleicht enthält Ihre Datenbank Daten, die nicht den Einschränkungen Ihrer Felder entsprechen? Es klingt wie es ... – Bakuriu
Ich habe die Tabellen abgeschnitten. – Shaderlolz
Können Sie die Migrationsdatei anzeigen? – Bakuriu