İçeriğe geç

Django ORM Model İlişkileri

Django ilişkisel veritabanlari(PostgreSql,Mysql vb) ile çalışır ve modelleriniz arasında ilişkiler kurarak istediğiniz veriye ulaşmanızda size fazlasıyla yardımcı olabilir.

Kısacası ilişkilendirdiğiniz modeller ile ilişki kurduğunuz modellerden türettiğiniz nesnelerin verilerine derli toplu ve kolay bir biçimde ulaşmanızı sağlar. Bütün mantık bu.

Kurabileceğiniz İlişkiler

  • One to One
  • Many to one
  • Many to many

One to One

Elimizde Kullanıcı, Notebook olmak üzere 2 model bulunacak.

Senaryo : 

  • Bir notebookun yalnızca bir sahibi olabilir.
  • Bir kullanıcının sadece bir notebook’u olabilir.

Modellerimizi tanımlayarak başlayalım.

Daha sonra iki adet kullanıcı  oluşturalım ve kaydedelim.

İki adet de notebook oluşturalım ve kaydedelim.

Yukarıda 2 adet kullanıcı oluşturduktan sonra dikkat ettiyseniz oluşturduğumuz nesneleri sırasıyla notebook nesnelerinin kullanıcısına ilişkilendirdik.

Bu gibi kullanımlar ile tanımladığınız modeldeki field ve method’lara ulaşabilirsiniz.

İlişkilendirilen modellerden türetilen nesneler ile veritabanıza sorgular atabilirsiniz.

Fakat kurduğunuz ilişkinin mantığını unutmamalısınız ki hatalar ile karşılaşmayın. Senaryo kısmındada yazdığı üzere her notebook sadece bir kullanıcıya bir kullanıcı da sadece bir notebook’a sahip olabilir. Bu yüzden halihazırda bir notebooku olan bir kullanıcıya yeni bir notebook tanımlamaya çalışırsanız hata alırsınız.

Many to One

Makale ve Yazar olmak üzere 2 modelimiz bulunacak.

Senaryo:

  • Bir yazar birden fazla makale yazabilir.
  • Bir makale yalnızca bir yazar tarafından yazılabilir.

Herhalde dünyada en fazla tanımlanan iki Django modelini sorsalar direkt söyleceğim modeller bunlar olur. (Acaba neden?  🙂 ) Hızlıca modelleri tanımlayalım.

Hızlıca bir kaç nesne oluşturuyorum.

İlk oluşturduğum yazara iki adet makale atadım. Kullanıcı makalelerine ulaşmak için.

Burada related_name değişkenini kullanıyoruz. Bunun sebebi benim yazar üstünden sorgulamalarımda ‘articles’ keywordü ile makalelere ulaşmak istemem. Örnek olarak.

Bir makalenin yazarını takaslamak istersek.

Makale modeline author nesnesi üzerinden sorgu işlemleri. ( Author pk)

Author first name.

Yazar modeline makale nesnesi üzerinden sorgular.

Örnekler çoğaltılabilir. Bir çok farklı sorgu Django birbirine zincir şeklinde bağlanarak kullanılabilir.

Many to Many

Elimizde Makale ve Kategori adında 2 model bulunacak.

Senaryo:

  • Bir makale birden fazla kategoriye ait olabilir.
  • Bir kategori birden fazla makaleyi kapsayabilir.

Modellerimizi yazalım.

Diğer ilişkilerden farklı olarak burada da  iki modelimiz var fakat oluşacak tablo sayımız üç. Üçüncü tablo bir ara tablo görevi ise ilişkilendirilen kategori ve makaleler birden fazla olabileceği için kategori_id ve makale_id lerini tutmak.

Bir kaç kategori oluşturalım.

Ardından bir makale oluşturalım.

Kategorilerimizde ekleyelim. Fakat hatırlarsanız ForeignKey kullanarak oluşturduğumuz ilişkilerde related_name değişkeni ile many olarak belirlediğimiz nesnelere erişiyorduk. Burada ilişkilendirilen iki tarafta many. related_name değişkenini bu sefer ters ilişki sorgusu yapmak için kullanacağız. Az sonra anlayacaksınız devam edelim 🙂

Kategoriler eklendi. Fakat nasıl eriştiğimize dikkat edin lütfen.

Ters ilişki sorgusu.

Zincir sorgular.

Tamam gözüküyor.

ÖZET

Doğru IR diyagramları ile Django’da veritabanınızı modellemek gördüğünüz gibi çok kolay. Sadece neyi nerede ne şekilde tutacağınızı iyi planlamanız gerek gerisini Django hallediyor.

Daha ayrıntılı bilgi almak isteyenler için buraya link bırakıyorum.

Kolay gelsin 🙂

 

 

 

 

Tarih:BlogPython

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Göster
Gizle