Skip to content

Instantly share code, notes, and snippets.

@m5wdev
Created August 16, 2022 12:49
Show Gist options
  • Save m5wdev/fffad65438cc1e0d919b1e3c40d31db3 to your computer and use it in GitHub Desktop.
Save m5wdev/fffad65438cc1e0d919b1e3c40d31db3 to your computer and use it in GitHub Desktop.
Django Model Manager
from django.db import models
from django.conf import settings
User = settings.AUTH_USER_MODEL
class BlogQuerySet(models.QuerySet):
def published(self):
return self.filter(published=True)
def tag_movies(self):
return self.filter(tags__name='Movies')
class BlogManager(models.Manager):
def get_queryset(self):
# return super().get_queryset().filter(published=True)
# return BlogQuerySet(self.model).filter(published=True)
return BlogQuerySet(self.model)
def published(self):
# return self.get_queryset().filter(published=True)
return self.get_queryset().published()
def tag_movies(self):
# return self.get_queryset().filter(tags__name='Movies')
return self.get_queryset().tag_movies()
class Tags(models.Model):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
class Blog(models.Model):
published = models.BooleanField(default=False)
title = models.CharField(max_length=255)
body = models.TextField(blank=True, null=True)
tags = models.ManyToManyField(Tags, blank=True)
author = models.ForeignKey(User, on_delete=models.SET_NULL, blank=True, null=True)
created = models.DateTimeField(auto_now=False, auto_now_add=True)
updated = models.DateTimeField(auto_now=True, auto_now_add=False)
objects = models.Manager()
blogposts = BlogManager()
def __str__(self):
return self.title
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment