#21454: Ignoring certain fields on INSERT and UPDATE queries
-------------------------------------+-------------------------------------
     Reporter:  Apostolis Bessas     |                    Owner:  Joachim
                                     |  Jablon
         Type:  New feature          |                   Status:  assigned
    Component:  Database layer       |                  Version:  master
  (models, ORM)                      |
     Severity:  Normal               |               Resolution:
     Keywords:  oracle               |             Triage Stage:  Accepted
    Has patch:  1                    |      Needs documentation:  1
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------

Comment (by Justin Walters):

 Here is a Postgres-specific solution that doesn't change Django, for
 anybody who has been patiently waiting..

 {{{
 from psycopg2.extensions import register_adapter, AsIs
 from django.db import models, connection

 class PostgresDefaultValueType:
     pass

 class DelegatedCharField(models.CharField):
     def get_prep_value(self, value):
         return value or PostgresDefaultValueType()

 register_adapter(
     PostgresDefaultValueType, lambda _: AsIs('DEFAULT'))

 class Widget(models.Model):
     name = models.CharField(max_length=255)
     dbnow = DelegatedCharField(max_length=255, null=True)

 with connection.cursor() as cursor:
     cursor.execute('alter table widget alter column dbnow add default
 now()')

 Widget.objects.create(name="foo")
 }}}

 With the above magical goodness, Django will send this to Postgres:

 {{{
 insert into widget (name, dbnow) values ('foo', DEFAULT)
 }}}
 instead of
 {{{
 insert into widget (name, dbnow) values ('foo', NULL)
 }}}

 And.... did you know that that will delegate that field to Postgres's
 default automatically?!  I didn't, until yesterday!

-- 
Ticket URL: <https://code.djangoproject.com/ticket/21454#comment:28>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/065.0bf42c30f110d858943445f3c1810829%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to