Django Models Related_name Ile Ilgili
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.
- 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!
- 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