Django Model Managers and Querysets

One line create and save:

Article.objects.create(name='Item 1', price=19.95)

Retrieve all objects:

Article.objects.all()

Create object:

user = User.objects.first()
article = Article(user=user, name='Item 1', price=19.95)
article.save()
# One Line Create
obj = Article.objects.create(user=user, name='Item 1', price=19.95)

Bulk Create (improves performance):

MyModel.objects.bulk_create([
    MyModel(field_name='value1', another_field=42),
    MyModel(field_name='value2', another_field=43),
])

Save:

article.save()

Read one:

Article.objects.get(id=1)

Select Related (to avoid n+1 query):

posts = Post.objects.select_related('user', 'category').all()

Read or render a 404 not found page:

from django.shortcuts import get_object_or_404
article = get_object_or_404(Article, id=512)

Filter:

Article.objects.filter(model='dyson', name__icontains='dyson') # __icontains
Article.objects.filter(year__gt=2016) # __gt = greater than
Article.objects.filter(year__lt=2001) # __lt = less than

Filter on relationship sub model field:

Article.objects.get(user__username='mike')

Ordering:

Article.objects.order_by('name')     # ascending
Article.objects.order_by('-name')   # descending

Slicing return first:

Article.objects.all().order_by('name')[0]

Slicing return last:

Article.objects.all().order_by('-name')[0]

Slicing limit/offset:

Article.objects.all().order_by('name')[1..10]

Updating:

article = Article.objects.first().update(field_name='new_value')

One line update:

Article.objects.filter(id=4).update(name='new name')

Deleting:

article = Article.objects.first()
article.delete()

One line delete:

article.objects.get(id=1).delete()

Delete all:

Article.objects.all().delete()

Set ForeignKey field value:

model1 = Model(name='dyson')
article.model = model1

Get ForeignKey value:

article1.model.name
model1.article_set.all()

Add Many-to-Many:

article1.tags.add(tag1)
article1.tags.all()
tag1.articles_set.all()

Exclude objects:

excluded_objects = MyModel.objects.exclude(field_name='value')

Count objects:

count_objects = MyModel.objects.count()

Check if an object exists:

exists = MyModel.objects.filter(field_name='value').exists()