> 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? 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.
Antonis Christofides http://djangodeployment.com On 01/04/2017 04:58 PM, 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] <mailto:[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 Christofides > http://djangodeployment.com > > > On 01/04/2017 03:10 PM, [email protected] <mailto:[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: >> | >> Operationsto perform: Applyall >> >> migrations:activities,addressbook,admin,auth,contenttypes,sessions,users >> Runningmigrations: >> >> Applyingactivities.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,inexecute_from_command_line utility.execute() >> >> File"/webapps/mzg/venv/lib/python3.5/site-packages/django/core/management/__init__.py",line >> 359,inexecute >> 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,inrun_from_argv >> self.execute(*args,**cmd_options) >> >> File"/webapps/mzg/venv/lib/python3.5/site-packages/django/core/management/base.py",line >> 345,inexecute output =self.handle(*args,**options) >> >> File"/webapps/mzg/venv/lib/python3.5/site-packages/django/core/management/commands/migrate.py",line >> 204,inhandle fake_initial=fake_initial, >> >> File"/webapps/mzg/venv/lib/python3.5/site-packages/django/db/migrations/executor.py",line >> 115,inmigrate 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,inapply_migration state >> =migration.apply(state,schema_editor) >> >> File"/webapps/mzg/venv/lib/python3.5/site-packages/django/db/migrations/migration.py",line >> 129,inapply >> >> 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,indatabase_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,inalter_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,ineffective_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,inget_db_prep_save prepared=False) >> >> File"/webapps/mzg/venv/lib/python3.5/site-packages/django/db/models/fields/__init__.py",line >> 1280,inget_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,inget_prep_value returnself.to_python(value) >> >> File"/webapps/mzg/venv/lib/python3.5/site-packages/django/db/models/fields/__init__.py",line >> 1250,into_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] this group at >> https://groups.google.com/group/django-users >> <https://groups.google.com/group/django-users>. >> To view this discussion on the web visit >> >> https://groups.google.com/d/msgid/django-users/4f8e0aad-9c6e-45c5-a476-22f604584b0a%40googlegroups.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 >> <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 >> <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 >> <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 >> <https://groups.google.com/group/django-users>. To view this >> discussion on the web visit >> >> https://groups.google.com/d/msgid/django-users/e2f9758c-fc43-41c3-b7d2-fdbd8cc2998f%40googlegroups.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 >> <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] >> <mailto:[email protected]>. To post to this >> group, send email to [email protected] >> <mailto:[email protected]>. Visit this group at >> https://groups.google.com/group/django-users >> <https://groups.google.com/group/django-users>. To view this discussion >> on the web visit >> >> https://groups.google.com/d/msgid/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 >> <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] > <mailto:[email protected]>. To post to this group, > send email to [email protected] > <mailto:[email protected]>. Visit this group at > https://groups.google.com/group/django-users > <https://groups.google.com/group/django-users>. > To view this discussion on the web visit > > https://groups.google.com/d/msgid/django-users/918d7b4b-d36a-2764-c89b-bb6bd5880dea%40djangodeployment.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 > <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] > <mailto:[email protected]>. To post to this group, > send email to [email protected] > <mailto:[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/CAFWa6tKHWTtEr2XjRXm520tz9sGT0Xaw9UwROt3EGKSJZGMbbg%40mail.gmail.com > <https://groups.google.com/d/msgid/django-users/CAFWa6tKHWTtEr2XjRXm520tz9sGT0Xaw9UwROt3EGKSJZGMbbg%40mail.gmail.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/58324300-c7be-41aa-86fd-7e9e72152a94%40djangodeployment.com. For more options, visit https://groups.google.com/d/optout.

