Opened 10 years ago

Last modified 9 years ago

#22571 closed Cleanup/optimization

DateTimeField(auto_now_add=True) Breaks — at Initial Version

Reported by: nu.everest@… Owned by: nobody
Component: Documentation Version: 1.4
Severity: Normal Keywords: integrityerror auto_now_add get_or_create duplicatekey
Cc: me@… Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

Example:
# Given this simple model
class Foo(models.Model):

name = models.CharField(max_length=100)
date_added = models.DateTimeField(auto_now_add=True)

# This will always be true, even if an instance
# with this name and today's date already exists

bar, created = Foo.objects.get_or_create(

name = 'Alex',
date_added = some_datetime_obj

)

print created
# >> True

# The problem is, auto_now_add does some stuff that
# makes it uneditable, and messes up my expectations
# when using it with get_or_create

# Here's the solution
class Foo(models.Model):

name = models.CharField(max_length=100)
date_added = models.DateTimeField(default=datetime.today())

bar, created = Foo.objects.get_or_create(

name = 'Alex',
date_added = some_datetime_obj

)

print created
# >> False

Error:
django.db.utils.IntegrityError: duplicate key value violates unique constraint

These two links document the issue:
http://alexkehayias.tumblr.com/post/33889961953/django-gotcha-duplicate-models-when-using

http://stackoverflow.com/questions/9297422/get-or-create-failure-with-django-and-postgres-duplicate-key-value-violates-uni

Change History (0)

Note: See TracTickets for help on using tickets.
Back to Top