> Because attempting to interpret the string '17/06/2017' as a date is risky and will lead to trouble sooner or later, regardless the backend. This is a valid point, but I believe this is related to sqlite behaviour not the ORM using it.
mysql for example has its own bugs, there was one about truncating silently too long values assigned to a column. If I am using postgres why should my library limit me with mysql limitations? > I use SQLite locally for development and Postgres in production. So when my migration runs fine locally I expect it to also work fine when I upload it 5 minutes later and try to apply it to my Postgres database. This is a valid point to run tests, you really should have a gitlab, jenkins, travis whatever running tests because this is not the only difference between sqlite and postgres On Wed, Jan 4, 2017 at 5:11 PM, <[email protected]> wrote: > I use SQLite locally for development and Postgres in production. So when > my migration runs fine locally I expect it to also work fine when I upload > it 5 minutes later and try to apply it to my Postgres database. > > > On Wednesday, January 4, 2017 at 3:59:52 PM UTC+1, Avraham Serour wrote: >> >> well the ORM does abstract the different API's for each backend, you may >> give an datetime object and it will take care to format to the appropriate >> thing the backend needs. >> >> you are right that it does not check the type of the value passed, it is >> a valid point that the library should check the type, but on the other hand >> if one is using sqlite why enforce stricter rules than the backend I'm >> using just because one other backend has a problem with it? >> >> Also this is python, if it quacks like a duck then it is a duck, right? >> >> >> On Wed, Jan 4, 2017 at 3:24 PM, Antonis Christofides < >> [email protected]> wrote: >> >>> Instead of default='17/06/2017', you should write >>> default=datetime(2017, 6, 17). The bug in Django (if it is a bug, and I >>> think it is) is that it does not require you to do so. There's probably a >>> reason for it, but I don't really know.. >>> >>> Regards, >>> >>> Antonis >>> >>> Antonis Christofideshttp://djangodeployment.com >>> >>> >>> On 01/04/2017 03:10 PM, [email protected] wrote: >>> >>> I thought the whole point of an ORM was to abstract away differences >>> between backends... That's why this seems like a bug to me. >>> >>> >>> On Wednesday, January 4, 2017 at 1:02:07 PM UTC+1, Avraham Serour wrote: >>>> >>>> Well this is the reality right now, if you think the framework is >>>> acting wrong you may file a bug report. >>>> >>>> In my opinion the wrong side of the equation is you, the framework is >>>> just passing the value you assigned, the ORM tries to make a consistent API >>>> between backends but I wouldn't really expect the same behaviour from all >>>> backends, after all they are different backends, they will have different >>>> bugs, performance and ultimately different behaviour >>>> >>>> On Wed, Jan 4, 2017 at 1:47 PM, <[email protected]> wrote: >>>> >>>>> The fact that some backends are more forgiving is exactly my point. >>>>> Maybe the migrations engine should always force a datetime object (or at >>>>> least a YYYY-MM-DD notation) to make it work consistently on all backends. >>>>> >>>>> >>>>> On Wednesday, January 4, 2017 at 11:35:38 AM UTC+1, Avraham Serour >>>>> wrote: >>>>>> >>>>>> DateField is a representation of datetime.date, so you should assign >>>>>> a date object and not a string, sqlite is more forgiving and doesn't >>>>>> complain so much in many cases >>>>>> >>>>>> On Wed, Jan 4, 2017 at 12:13 AM, <[email protected]> wrote: >>>>>> >>>>>>> This field: >>>>>>> >>>>>>> activity_date = models.DateField('Datum', default='17/06/2017') >>>>>>> >>>>>>> >>>>>>> Results in this migration: >>>>>>> >>>>>>> class Migration(migrations.Migration): >>>>>>> >>>>>>> dependencies = [ >>>>>>> ('activities', '0006_auto_20161231_1703'), ] >>>>>>> >>>>>>> operations = [ >>>>>>> migrations.AlterField( >>>>>>> model_name='activity', name='activity_date', >>>>>>> field=models.DateField(default='17/06/2017', >>>>>>> verbose_name='Datum'), ), ] >>>>>>> >>>>>>> Which works fine on SQLite but gives this error on Postgres: >>>>>>> Operations to perform: Apply all migrations: activities, >>>>>>> addressbook, admin, auth, contenttypes, sessions, users Running >>>>>>> migrations: Applying activities.0007_auto_20170103_2309... >>>>>>> Traceback (most recent call last): File "manage.py", line 22, in >>>>>>> <module> execute_from_command_line(sys.argv) File >>>>>>> "/webapps/mzg/venv/lib/python3.5/site-packages/django/core/ >>>>>>> management/__init__.py", line 367, in execute_from_command_line >>>>>>> utility.execute() File "/webapps/mzg/venv/lib/python3 >>>>>>> .5/site-packages/django/core/management/__init__.py", line 359, in >>>>>>> execute self.fetch_command(subcommand).run_from_argv(self.argv) >>>>>>> File "/webapps/mzg/venv/lib/python3.5/site-packages/django/core/ >>>>>>> management/base.py", line 294, in run_from_argv self.execute(* >>>>>>> args, **cmd_options) File "/webapps/mzg/venv/lib/python3 >>>>>>> .5/site-packages/django/core/management/base.py", line 345, in >>>>>>> execute output = self.handle(*args, **options) File >>>>>>> "/webapps/mzg/venv/lib/python3.5/site-packages/django/core/ >>>>>>> management/commands/migrate.py", line 204, in handle >>>>>>> fake_initial=fake_initial, File "/webapps/mzg/venv/lib/python3 >>>>>>> .5/site-packages/django/db/migrations/executor.py", line 115, in >>>>>>> migrate state = self._migrate_all_forwards(state, plan, >>>>>>> full_plan, fake=fake, fake_initial=fake_initial) File >>>>>>> "/webapps/mzg/venv/lib/python3.5/site-packages/django/db/ >>>>>>> migrations/executor.py", line 145, in _migrate_all_forwards >>>>>>> state = self.apply_migration(state, migration, fake=fake, >>>>>>> fake_initial=fake_initial) File "/webapps/mzg/venv/lib/python3 >>>>>>> .5/site-packages/django/db/migrations/executor.py", line 244, in >>>>>>> apply_migration state = migration.apply(state, schema_editor) >>>>>>> File "/webapps/mzg/venv/lib/python3.5/site-packages/django/db/ >>>>>>> migrations/migration.py", line 129, in apply operation. >>>>>>> database_forwards(self.app_label, schema_editor, old_state, >>>>>>> project_state) File "/webapps/mzg/venv/lib/python3 >>>>>>> .5/site-packages/django/db/migrations/operations/fields.py", line >>>>>>> 204, in database_forwards schema_editor.alter_field(from_model, >>>>>>> from_field, to_field) File "/webapps/mzg/venv/lib/python3 >>>>>>> .5/site-packages/django/db/backends/base/schema.py", line 495, in >>>>>>> alter_field old_db_params, new_db_params, strict) File >>>>>>> "/webapps/mzg/venv/lib/python3.5/site-packages/django/db/ >>>>>>> backends/postgresql/schema.py", line 117, in _alter_field >>>>>>> new_db_params, strict, File "/webapps/mzg/venv/lib/python3 >>>>>>> .5/site-packages/django/db/backends/base/schema.py", line 578, in >>>>>>> _alter_field new_default = self.effective_default(new_field) >>>>>>> File "/webapps/mzg/venv/lib/python3.5/site-packages/django/db/ >>>>>>> backends/base/schema.py", line 221, in effective_default default >>>>>>> = field.get_db_prep_save(default, self.connection) File >>>>>>> "/webapps/mzg/venv/lib/python3.5/site-packages/django/db/ >>>>>>> models/fields/__init__.py", line 755, in get_db_prep_save >>>>>>> prepared=False) File "/webapps/mzg/venv/lib/python3 >>>>>>> .5/site-packages/django/db/models/fields/__init__.py", line 1280, in >>>>>>> get_db_prep_value value = self.get_prep_value(value) File >>>>>>> "/webapps/mzg/venv/lib/python3.5/site-packages/django/db/ >>>>>>> models/fields/__init__.py", line 1275, in get_prep_value return >>>>>>> self.to_python(value) File "/webapps/mzg/venv/lib/python3 >>>>>>> .5/site-packages/django/db/models/fields/__init__.py", line 1250, in >>>>>>> to_python params={'value': value}, django.core.exceptions. >>>>>>> ValidationError: ["'17/06/2017' waarde heeft een ongeldige >>>>>>> datumnotatie. Deze moet in de YYYY-MM-DD notatie opgegeven worden."] >>>>>>> The error says: "DATE" has an invalid date notation. It must be >>>>>>> submitted as YYYY-MM-DD notation. Timezone/locale is Europe/Amsterdam in >>>>>>> case that makes a difference. On Tuesday, January 3, 2017 at >>>>>>> 2:17:36 PM UTC+1, Avraham Serour wrote: >>>>>>>> >>>>>>>> please post your migration file and the error >>>>>>>> On Tue, Jan 3, 2017 at 12:00 PM, <[email protected]> wrote: >>>>>>>>> >>>>>>>>> I recently set a default value in my local date format on a >>>>>>>>> DateTimeField while I was using SQLite. The migration ran fine on my >>>>>>>>> SQLite >>>>>>>>> dev database, but when trying to apply the migration on my production >>>>>>>>> Postgres database I got an error saying that a default value for >>>>>>>>> DateTimeField must be in the format of 'YYYY-MM-DD'. Wouldn't it be >>>>>>>>> prudent >>>>>>>>> to force users to always specify the default value in the 'YYYY-MM-DD' >>>>>>>>> format to avoid this problem of portability? (Not sure how MySQL >>>>>>>>> handles it) >>>>>>>>> -- You received this message because you are subscribed to the >>>>>>>>> Google Groups "Django users" group. To unsubscribe from this >>>>>>>>> group and stop receiving emails from it, send an email to >>>>>>>>> [email protected]. To post to this group, send >>>>>>>>> email to [email protected]. Visit this group at >>>>>>>>> https://groups.google.com/group/django-users. To view this >>>>>>>>> discussion on the web visit https://groups.google.com/d/ms >>>>>>>>> gid/django-users/4f8e0aad-9c6e-45c5-a476-22f604584b0a%40goog >>>>>>>>> legroups.com >>>>>>>>> <https://groups.google.com/d/msgid/django-users/4f8e0aad-9c6e-45c5-a476-22f604584b0a%40googlegroups.com?utm_medium=email&utm_source=footer>. >>>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>> >>>>>>>> -- You received this message because you are subscribed to the >>>>>>> Google Groups "Django users" group. To unsubscribe from this group and >>>>>>> stop >>>>>>> receiving emails from it, send an email to >>>>>>> [email protected]. To post to this group, send email >>>>>>> to [email protected]. Visit this group at >>>>>>> https://groups.google.com/group/django-users. >>>>>>> To view this discussion on the web visit >>>>>>> https://groups.google.com/d/msgid/django-users/562fac5e-de18 >>>>>>> -4eb4-b90a-3121f43c29bc%40googlegroups.com >>>>>>> <https://groups.google.com/d/msgid/django-users/562fac5e-de18-4eb4-b90a-3121f43c29bc%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>> . >>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>> >>>>>> -- You received this message because you are subscribed to the Google >>>>> Groups "Django users" group. To unsubscribe from this group and stop >>>>> receiving emails from it, send an email to >>>>> [email protected]. To post to this group, send email >>>>> to [email protected]. Visit this group at >>>>> https://groups.google.com/group/django-users. To view this discussion >>>>> on the web visit https://groups.google.com/d/ms >>>>> gid/django-users/e2f9758c-fc43-41c3-b7d2-fdbd8cc2998f%40goog >>>>> legroups.com >>>>> <https://groups.google.com/d/msgid/django-users/e2f9758c-fc43-41c3-b7d2-fdbd8cc2998f%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>> . >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> -- You received this message because you are subscribed to the Google >>> Groups "Django users" group. To unsubscribe from this group and stop >>> receiving emails from it, send an email to django-users...@googlegroups. >>> com. To post to this group, send email to [email protected]. >>> Visit this group at https://groups.google.com/group/django-users. To >>> view this discussion on the web visit https://groups.google.com/d/ms >>> gid/django-users/a4113f3e-3166-453f-ae1e-82158b9d9b1b%40googlegroups.com >>> <https://groups.google.com/d/msgid/django-users/a4113f3e-3166-453f-ae1e-82158b9d9b1b%40googlegroups.com?utm_medium=email&utm_source=footer>. >>> For more options, visit https://groups.google.com/d/optout. >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Django users" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> To post to this group, send email to [email protected]. >>> Visit this group at https://groups.google.com/group/django-users. >>> To view this discussion on the web visit https://groups.google.com/d/ms >>> gid/django-users/918d7b4b-d36a-2764-c89b-bb6bd5880dea%40djan >>> godeployment.com >>> <https://groups.google.com/d/msgid/django-users/918d7b4b-d36a-2764-c89b-bb6bd5880dea%40djangodeployment.com?utm_medium=email&utm_source=footer> >>> . >>> >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at https://groups.google.com/group/django-users. > To view this discussion on the web visit https://groups.google.com/d/ > msgid/django-users/65ddba02-6cde-4e62-af9a-3a6747716040%40googlegroups.com > <https://groups.google.com/d/msgid/django-users/65ddba02-6cde-4e62-af9a-3a6747716040%40googlegroups.com?utm_medium=email&utm_source=footer> > . > > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAFWa6tKZnuoM-tj8rzoxxCpGhhUHX1Oq9Z0A%2BfWpk6fECMgceg%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.

