Django Models Related_name Ile Ilgili

less than 1 minute read

related_name=”XXXXX”

Yukarıdaki satır django modellerindeki, ForeignKey fieldlarına ekleyebileceğimiz bir parametre. Peki bu parametre ne iş yapar?

(StackOverflow’dan verilen örnek üzerinden gideceğim) :

class Post(models.Model):
    # ... fields ...

class Comment(models.Model):
    # ... fields ...
    post = models.ForeignKey(Post, related_name=???)

Bu şekilde 2 modelimiz olsun. Comment’ler Post’lardan ForeignKey çeksin. Ve developerımız da belirli bir post’a ait commentleri çekmek istiyor olsun.

  1. CASE-1

EĞER related_name parametresi YAZILMAZSA :::

some_post = Post.objects.get(id=12345)
comments = some_post.comment_set.all()

Şeklinde yazmak zorundadır. İlk satırda görüldüğü gibi 12345 idesine sahip post çekildi,2.satırda ise bu id’ye sahip yorumlar çekiliyor. Fakat dikkat edilirse , “comment_set” şeklinde bir kullanımla çekiliyor. Burada “modeladı_set” default olarak Django’nun atadığı bir kullanım şekli. İŞTE related_name PARAMETRESİ İLE BİZ BU KULLANIMI OVERRİDE EDİYORUZ!

  1. CASE-2

related_name atarsak ;

class Post(models.Model):
    # ... fields ...

class Comment(models.Model):
    # ... fields ...
    post = models.ForeignKey(Post, related_name="comments") #!!! BURAYA DİKKAT

some_post = Post.objects.get(id=12345)
comments = some_post.comments.all()

related_name parametresinin eklendiği CASE-2’de görüldüğü gibi yorumları override ettiğimiz gibi “comments” ismiyle çağırabildik.

%(class) KULLANIMI :

related_name = “%(class)_comments” dediğimiz zaman, %(class) kısmı otomatik olarak modelin ismini alır. Yani bu durumda related_name’imiz, “Comment_comments” olur.

Evet bu isimlendirme örneği saçma oldu fakat maksat hasıl oldu zannediyorum.

Leave a comment