Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create if doesn't exist

Tags:

django

models

I have a Django application that reads data from a web API and puts it in a database.
Is there a way to create a new object from a mode but prevent the duplicate exception if the object already exists?

In other words, is there a way to save an object, but to just do nothing if it already exists?

like image 951
user1094786 Avatar asked Jan 07 '12 00:01

user1094786


3 Answers

Model.objects.get_or_create()

like image 154
second Avatar answered Nov 13 '22 08:11

second


In Django 1.7, you can also do:

Model.objects.update_or_create()

like image 44
Benoit Blanchon Avatar answered Nov 13 '22 08:11

Benoit Blanchon


It can be achieved using Model.objects.get_or_create()

Example

obj, created = Person.objects.get_or_create(
    first_name='John',
    last_name='Lennon',
    defaults={'birthday': date(1940, 10, 9)},
)

Any keyword arguments(here first_name and last_name) passed to get_or_create() — except an optional one called defaults — will be used to query in database(find the object) in database.

It returns a tuple, if an object is found, get_or_create() returns a tuple of that object and False.

Note: Same thing can also be achieved using try except statements
Example:

try:
    obj = Person.objects.get(first_name='John', last_name='Lennon')
except Person.DoesNotExist:
    obj = Person(first_name='John', last_name='Lennon', birthday=date(1940, 10, 9))
    obj.save()
like image 26
Abhishek Pratap Singh Avatar answered Nov 13 '22 06:11

Abhishek Pratap Singh