Kalıtım, kodu yeniden kullanmanıza ve daha temiz veri modelleri oluşturmanıza olanak tanır. Ancak Django, devralmak için birden fazla yol sunar, bu nedenle farklılıkları bildiğinizden emin olun.

Model devralma, geliştiricilerin veritabanı modelleri arasında hiyerarşik ilişkiler oluşturmasına olanak tanıyan bir Django ORM özelliğidir. Nesne yönelimli programlama ilkelerinden yararlanarak kodun yeniden kullanımına, genişletilebilirliğine ve daha temiz bir kod tabanına olanak tanır.

İster karmaşık bir web uygulaması oluşturuyor, ister daha küçük bir proje üzerinde çalışıyor olun, model devralma, fazlalığı azaltmak ve tutarlı davranış sağlamak gibi önemli avantajlar sağlayabilir.

Django'da Model Kalıtım Türleri

Django, üç tür model devralma için destek sunar:

  1. Soyut Temel Sınıflar.
  2. Çok tablolu Kalıtım.
  3. Proxy Modelleri.

Bu model devralma türlerinin her birinin avantajları vardır ve bunları belirli amaçlar için kullanacaksınız.

Soyut Temel Sınıflar

Soyut temel sınıflar, birden çok modelin miras alabileceği ortak alanları ve yöntemleri tanımlamanın bir yolunu sağlar. Örneğin, benzer alanları paylaşan iki modeliniz varsa, benzer alanları tanımlamak için soyut bir temel sınıf kullanabilirsiniz. Bu örneğe bir göz atın:

instagram viewer

sınıfMüşteri(modeller. modeli):
isim = modeller. CharField (maks_uzunluk=50)
e-posta = modeller. EmailField()
müşteri_kimliği = modeller. TamsayıAlanı()

sınıfsatıcı(modeller. modeli):
isim = modeller. CharField (maks_uzunluk=50)
e-posta = modeller. EmailField()
seller_id = modeller. TamsayıAlanı()

Yukarıdaki kod parçacığı iki Django modelini tanımlar: Müşteri Ve satıcı. Bu modeller iki ortak alanı paylaşır, yani isim Ve e-posta. Bu fazlalığı önlemek için, ortak alanları içinde tutmak için ayrı bir model oluşturabilirsiniz. Müşteri Ve satıcı modeller ve soyut hale getirir.

sınıfKullanıcı bilgisi(modeller. modeli):
isim = modeller. CharField (maks_uzunluk=50)
e-posta = modeller. EmailField()

sınıfMeta:
özet = Doğru

Yukarıdaki kod parçacığı yeni bir model tanımlar ve soyut öznitelik Doğru. Bu, modelin soyut olacağı ve Django'nun veritabanında bir tablo oluşturmayacağı anlamına gelir.

yeniden yazabilirsiniz Müşteri Ve satıcı bunun gibi modeller:

sınıfMüşteri(Kullanıcı bilgisi):
müşteri_kimliği = modeller. TamsayıAlanı()

sınıfsatıcı(Kullanıcı bilgisi):
seller_id = modeller. TamsayıAlanı()

Yukarıdaki kod parçacığında, Müşteri Ve Satıcılar modeller miras alır Kullanıcı bilgisi modeli yerine modeller. modeli.

Modellerinizi yönetici panelinize kaydederek görüntüleyebilirsiniz. admin.py dosya şu şekilde:

itibaren .modeller içe aktarmak Müşteri, Satıcı

admin.site.register (Müşteri)
admin.site.register (Satıcı)

Aşağıdakileri bir bilgisayarda çalıştırarak modlarınızı taşıyın ve geliştirme sunucunuzu başlatın. Komut satırı:

python manager.py makemigrations \
&& python manager.py taşıma \
&& python manager.py çalıştırma sunucusu

Yönetici sitenize gidin ve süper kullanıcı bilgilerinizle oturum açın. Her model için üç alanı da görmelisiniz.

Bu örnekte, Django aşağıdakiler için bir tablo oluşturmuştur: Müşteri Ve satıcı modeller. görebilirsin ki Kullanıcı bilgisi model soyut olduğu için tablosu yoktur.

Çoklu Tablo Kalıtımı

Üst modelin veritabanında alt modelin yanında bir tablo olarak da bulunması gerektiğinde çok tablolu kalıtımı kullanabilirsiniz.

Üst modelin veritabanında bir tablo olmayacağı soyut temel sınıf kalıtımın aksine, çok tablolu kalıtım, üst model için bir tablo oluşturur.

Çok tablolu kalıtımda, alt model, üst modelinden tüm alanları ve yöntemleri devralır ve kendi özel alanlarını ekler. Yabancı anahtarlar kurulmasına yardımcı olmak model ilişkisi Ebeveyn ve çocuk modelleri arasında.

İşte çok tablolu kalıtımın bir örneği:

sınıfKişi(modeller. modeli):
first_name = modeller. CharField (maks_uzunluk=100)
soyadı_ad = modeller. CharField (maks_uzunluk=100)

kesinlikleget_name(kendi):
geri dönmekF"{kendi.ilk_adı}{self.last_name}"

sınıfMeta:
özet = Doğru

sınıfÇalışan(Kişi):
çalışan_kimliği = modeller. CharField (maks_uzunluk=20)
departman = modeller. CharField (maks_uzunluk=100)
maaş = modeller. FloatField()
dob = modeller. tarih alanı()

sınıfMüdür(Çalışan):
başlık = modeller. CharField (maks_uzunluk=100)

Bu kod parçacığı üç modeli tanımlar. adı verilen ilk model Kişi, soyuttur. Bir kişinin yalnızca adını ve soyadını tanımlar.

adı verilen ikinci model Çalışan, alanlarını devralır Kişi ancak ek alanları tanımlar. bu Çalışan model soyut değildir, bu nedenle veritabanında tablosu olacaktır.

adı verilen son model Müdür, alanlarını devralır Çalışan adlı bir alan ekler. başlık.

arasındaki ilişki Çalışan Ve Müdür modeller denir Çoklu Tablo Kalıtımı. Modellerinizi taşıyın, kaydedin admin.py, sunucunuzu başlatın ve yönetici paneline gidin. Django tarafından oluşturulan iki tablo görmelisiniz.

Yeni bir yönetici eklemeye çalıştığınızda, yöneticinin tüm alanlara sahip olduğunu fark edeceksiniz. Çalışan modelin yanı sıra kendi özel alanı.

Proxy Modelleri

Proxy modeli, yeni bir veritabanı tablosu oluşturmadan mevcut bir modelden genişleyen yeni bir model oluşturmanıza yardımcı olur. Bu tür bir model kalıtımında, proxy ve orijinal modeller aynı tabloyu paylaşacaktır. Proxy modellerini kullanarak, özel modeller oluşturma ve varsayılan yöneticileri değiştirme gibi işlemleri yapabilirsiniz.

ekleyerek bir proxy modeli oluşturabilirsiniz. proxy=Doğru içinde Meta sınıf. İşte bir örnek:

sınıfProxy Modeli(TemelModel):

sınıfMeta:
vekil = Doğru

Bir proxy modelinin tipik kullanımı, bir temel model mevcut olduğunda ve bunun ek işlevlerle özel bir sürümünün oluşturulmasına ihtiyaç duyulduğunda uygundur. İşte temel bir örnek:

sınıfPostalamak(modeller. modeli):
başlık = modeller. CharField (maks_uzunluk=30)
yazar = modeller. CharField (maks_uzunluk=30)

kesinlikle__str__(kendi):
geri dönmek self.title

sınıfProxy Gönderisi(Postalamak):

sınıfMeta:
vekil = Doğru

Bu kod parçacığı iki modeli tanımlar: Postalamak Ve Gönderim. bu Postalamak model, başlık ve yazar için iki alan tanımlar. bu Proxy Gönderisi modelden devralır Postalamak modeli.

Yukarıdaki modelleri taşıyın ve oluşturulan tabloya yeni bir gönderi ekleyin. Postalamak modeli.

Gönderiyi ekledikten sonra, proxy gönderileri masa. Eklediğiniz gönderiyi bulmalısınız. Postalamak içinde masa.

Şuradaki gönderilerde yaptığınız değişiklikler: proxy gönderileri tablo, ilgili gönderiyi etkileyecektir. Postalamak masa ve tersi. Bu, gerçekten aynı masayı paylaştıklarını kanıtlıyor.

değiştirebilirsiniz str() proxy modelinin yöntemi:

sınıfProxy Gönderisi(Postalamak):

sınıfMeta:
vekil = Doğru
sıralama = ["başlık"]

kesinlikle__str__(kendi):
geri dönmek self.yazar

Bu değişiklikle bir ProxyPost'lar dize temsili, başlık değil yazarı olacaktır. Proxy modelinin sıralaması da varsayılan kimlik alanı yerine başlığa göre olacaktır.

Proxy modelleri kullanırken, proxy modelinize özel alanlar ekleyemeyeceğinizi aklınızda bulundurmalısınız. Proxy modellerinin birincil kullanım durumu, bir modelin birden çok davranışı desteklemesini istediğiniz zamandır.

Proxy modelleri, mevcut bir modelin davranışını, alanlarını veya temel alınan veritabanı tablo yapısını değiştirmeden değiştirmenize yardımcı olur.

Kodun Yeniden Kullanılabilirliği ve Organizasyon Yapısı için Model Kalıtımını Kullanın

Farklı model devralma tekniklerini kullanarak, projeniz için kolayca yeniden kullanılabilir ve düzenli kodlar oluşturabilirsiniz.

Model devralma, gereksiz kodu önler ve kodunuzun sürdürülebilirliğini ve ölçeklenebilirliğini artırır. Ayrıca kodunuzda gezinmeyi kolaylaştırarak geliştirme ekipleri arasında verimli işbirliğini teşvik eder.

Django, model devralmanın yanı sıra, projeleriniz için şablonları yönetmenin ve düzenlemenin harika bir yolu olan şablon devralma sunar.