[Django]-Django models, custom functions

84πŸ‘

βœ…

What you probably want is a custom manager

From the django docs:

        # An example of a custom manager called "objects".

class PersonManager(models.Manager):
    def get_fun_people(self):
        return self.filter(fun=True)

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    fun = models.BooleanField()
    objects = PersonManager()

    def __unicode__(self):
        return u"%s %s" % (self.first_name, self.last_name)

which then allows you to do something like:

>>> p1 = Person(first_name='Bugs', last_name='Bunny', fun=True)
>>> p1.save()
>>> p2 = Person(first_name='Droopy', last_name='Dog', fun=False)
>>> p2.save()
>>> Person.objects.get_fun_people()
[<Person: Bugs Bunny>]
πŸ‘€aciniglio

23πŸ‘

As is stated in the docs here, if you need to add custom row-level functionality to your objects, you need to define custom methods on your models. However, if what you are after is custom table-wide functionality (such as getting all Article objects that qualify certain conditions), you have to define custom methods on model Managers (much as aciniglio above points out in their answer).

πŸ‘€ayaz

20πŸ‘

You can use the staticmethod decorator.

class Article(models.Model):
    title = models.CharField(...)
    isPublished = models.BooleandField()

    @staticmethod
    def get_active():
        return Article.objects.filter(isPublished = 1)
πŸ‘€David

Leave a comment