Django Custom Manager Yazımı

Bu yazıda basit bir şekilde Django ile custom bir Manager nasıl yazılır ondan bahsedeceğim.

Manager Nedir ?

Manager, Django'da database sorgulama işlemleri için sağlanan arayüz olarak tanımlanabilir. Her model en az bir tane manager içermektedir. Bu terimi bugün ilk defa duyuyor olsanız bile yazdığınız sorgularda objects managerini sürekli kullandınız.

Örnek vermek gerekirse,

    Post.objects.all()

Bu yazdığımız sorguyu incelersek, objects bir manager iken, all ise bu managera ait bir fonksiyondur. Şimdi gelin çok basit bir şekilde kendi managerimizi yazalım. Elimizde şu şekilde bir model olduğunu varsayalım.

class Comment(models.Model):
    post = models.ForeignKey(Post, related_name='comment')
    name = models.CharField(max_length=30)
    content = models.CharField(max_length=200)
    status = models.BooleanField(default=False)

Manager yazmadan önce tüm Commentleri çeken soruguyu yazalım ve sonucunu görelim.

>>> Comment.objects.all()
[<Comment: Comment object>, <Comment: Comment object>]

Gördüğünüz gibi database içerisinde iki tane Comment bulunmakta. Şimdi ise kendi Managerimizi yazalım ve all fonskiyonu çağrıldığında sadece onaylanmış(status=True) commentleri getirelim.

from django.db import models

class CommentManager(models.Manager):
    def all(self, *args, **kwargs):
        return super(CommentManager, self).filter(status=True)

class Comment(models.Model):
    post = models.ForeignKey(PostModel, related_name='comment')
    name = models.CharField(max_length=30)
    content = models.CharField(max_length=200)
    status = models.BooleanField(default=False)
    objects = CommentManager()

Aynı sorguyu tekrar atalım;

>>> Comment.objects.all()
[<Comment: Comment object>]

Gördüğünüz gibi, sadece onaylanmış commentler geldi. Custom bir manager yazmak bu kadar kolay. İhtiyaçlarınız doğrultusunda yeni fonskiyonlar ekleyebilir ve özelleştirebilirsiniz.

Kolay gelsin..