Django Modelleri Nedir? Django’da Model Oluşturma

Merhaba Dostlar bu konumda: Django Modelleri Nedir? Django’da Model Oluşturma Konularını inceleyeceğiz.

Modeller için en iyi anlatım yolunun post(gönderi) sistemi olduğunu düşünüyorum.
Biz de bir post sistemi yapacağız.
Başlamadan önce bir dipnot geçeyim. Eğer sizlere windows-linux diye ayırmamışsam kodlar ikisinde de aynıdır.

Terminali açıp şu kodları yazalım:

python manage.py startapp blog

Bu kod ile blog adında bir app oluşturduk. App mantığını bilmiyorsanız veya hatırlamıyorsanız bir önceki derse dönebilirsiniz. Önceki dersin linki en altta bulunmakta.

Görüldüğü üzere ders klasörünün altında blog klasörü oluştu.

├── blog
│ ├── init.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ └── init.py
│ ├── models.py
│ ├── tests.py
│ └── views.py

bu klasör içindekileri tek tek açıklayacağız ilerdeki derslerde. Öncelikle init.py dosyasının ne olduğunu söyleyeyim çünkü o dosya ile herhangi bir işimiz olmayacak. İnit dosyası sunucuya bu kodların ve dosyaların birer python dosyası olduğunu bildiriyor. İnit dosyalarına karışmayın.

Bizim konumuz modeller olduğundan bu ders models.py dosyasıyla ilgileneceğiz.

Öncelikle model kavramının aklınızda biraz şekillenmesi açısından açıklayayım.

Django Model Oluşturma

Yazılım dünyasında OOP denen bir kavram var. Duymuş olabilirsiniz. Açılımı Nesneye Yönelik Programlama. Models de bize bu kavramı sunuyor. Models.py dosyasında kendimize modeller ve nesneler tanımlayacağız ve bu nesnelerin birbirleriyle nasıl etkileşime girmesi gerektiğini açıklayacağız.

Kafanız biraz karışmış olabilir. Kodlama esnasında ne demek istediğimi çok iyi anlayacaksınız.

Öncelikle modelimizde neler olacağına karar verelim

  • Başlık
  • içerik kısmı
  • yayınlanma tarihi(ileri bir zamanda otomatik gönderim için)
  • kategori
  • yazar

Hemen kodlamaya başlıyalım. Öncelikle models.py dosyasının içini açalım. En üste yayınlanma tarihi gibi zaman olaylarını içinde barındıran timezone kütüphanesini ekleyelim.

from django.utils import timezone

Kodu ile ekleyebilirsiniz.
Ardından asıl kodlarımızı yazmaya başlıyalım.

class Kategori(models.Model):
    kategori = models.CharField(max_length=100)

    def __str__(self):
        return self.kategori

class Post(models.Model):
    author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
    title = models.CharField(max_length=75)
    text = models.TextField()
    catagory = models.ForeignKey(Kategori,on_delete=models.CASCADE)
    publish_date = models.DateTimeField(null=True,blank=True)

    def publish(self):
        self.publish_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title

Kodların ne anlama geldiklerini tek tek açıklayalım.
class ile bir sınıf oluşturduk. Modellerimizde nesnelerimizi ayrı ayrı tanımlayabilmemiz için.

kategorinin içine yine kategori adında bir değişken atadım. Değişkenin türünü de CharField yaptım. CharField küçük verilerin toplanmasının sağlandığı bir değişken türüdür ve parantez içinde max_length= olarak maksimum uzunluğunu belirtmeniz gerekir. Ben 100 olarak atadım. Atayabileceğiniz maksimimum değer 200’dür.

def ile str fonksiyonunu oluşturdum ve kategori değişkenini çağırdım. Bu da kategorileri veritabanına kaydederken verinin ismini kategori değişkenine girdiğimiz gibi kaydeder. Eğer bu işlemi yapmazsak veri tabanına kaydettiğimiz verileri Object1, Object2 gibi gözükür.

ForeignKey ise başka bir veritabanından veri çekmek için kullanılır. Örneğin yazar kısmında kullanıcılar veritabanından çekiyor, catagory de ise Kategori’den çekiyor.

TextField uzun yazıların girilmesine olanak sağlayan bir veri türüdür. () içinde charfield gibi maksimimum uzunluk belirtmeye gerek yoktur.

DateTimeField’da zaman olaylarını kaydedebileceğimiz bir veri türüdür. DateField tarih , TimeField saat , DateTimeField ise ikisinin birleşimidir. parantez içine girdiklerimiz ile bu verilerin boş geçilebileceğini söylüyoruz.

Publish fonksiyonunda ise publish_date ile girdiğimiz saat ve tarihin geldiği zaman yayınlanması gerektiğini gösteriyoruz.

Yine kategori sınıfında yaptığımız gibi burda da str fonksiyonu oluşturduk. Bu sefer veri başlığımızın postumuzun başlığı ile aynı olması gerektiğini söyledik.

Şimdi ise bu girdiğimiz nesneleri veritabanında bir tablo haline getirelim. Ama korkmayın django bize burada da tek satırla bu işlemi gerçekleştirebilme kolaylığını sağlıyor.

Öncelikle sitem klasötü içindeki settings.py dosyasını açalım. INSTALLED_APPS kısmına ‘blog’, yazalım. Bu bir liste olduğundan dolayı ” , ” koymayı unutmayınız. Bu işlem sayesinde djangoya bizim blog diye bir uygulama oluşturduğumuz haberini verdik.

Ardından terminalimizi açıp veritabanlarımızı yükleyelim. python manage.py makemigrations blog yazarak blog uygulamamız için bir migration oluşturalım. Ardından python manage.py migrate blog yazarak blog uygulamamızı veritabanına yükleyelim.

Tebrikler artık modeliniz veritabanına eklendi ve çalışır durumda. Bir sonraki derste modelinize veri eklemeyi ve kullanmayı göreceğiz.

DJANGO NEDİR? DJANGO KURULUMU

BİR SONRAKİ DERS: Django Admin Paneli Nedir? Nasıl Çalışır?

Python İçin En İyi Kod Editörleri Nelerdir

Yazılarımızdan Anında Haberdar Olmak İçin Telegram Kanalımıza katılabilir veya Instagram Hesabımızı Takip Edebilirsiniz.

Leave a Reply