30 Nisan 2014 Çarşamba

Alan Ekleme

Modelleri işlerken söylemiştik. Bir modeli oluşturduktan sonra o model bir kere okunur ve veritabanı oluşturulur. Yani model üzerinde yaptığınız değişiklikler veritabanına yansımayacaktır. Eğer yeni bir alan oluşturmak istersek veritabanını sildikten sonra Model üzerinde alanı ekleyerek veritabanını tekrardan oluşturabiliriz. Bu işlemin ne kadar can sıkıcı olduğunu görebiliyorsunuz. Özellikle veritabanı içerisinde çok fazla sayıda verileriniz varsa bu verileri kaybetmeniz anlamına gelir.
Şimdi model üzerine alan eklemeyi görelim. Doktor tablomuzda doktorun yaşını tutmuyorduk. Beraber yas alanını da ekleyelim. IntegerField türünden bir yaş alanı oluşturarak Doktor modeline ekleyeceğiz. Doktor modelini şu hale getirelim.
from django.core.validators import MaxValueValidator, MinValueValidator
class Doktor(models.Model):

 adi = models.CharField(max_length=50)
 soyadi = models.CharField(max_length=50)
 yas = models.IntegerField(blank=True,validators=[
  MaxValueValidator(70),
  MinValueValidator(30)
  ]
 )
 telefon = models.CharField(max_length=50,blank=True)
 eposta = models.EmailField(blank=True)

 def __unicode__(self):
  return u'%s , %s ,%s' % (self.adi,self.soyadi,self.eposta)
İlk satıra dikkat edin. Yaş alanının belli değerler arasında olmasını istiyoruz. Bunun için validators özelliğini kullandık. MaxValueValidator, MinValueValidator işlevlerini içe aktarmamız gerekiyor.
Yaş alanını Modele ekledik. Şimdi bu alanı veritabanına da eklemeliyiz. Bunun için Django kabuğunu açıyoruz ve şu işlemleri yapıyoruz.
python manage.py shell
>>> from django.conf import settings
>>> import sqlite3
>>> db = sqlite3.connect(settings.DATABASES['default']['NAME'])
>>> db.execute('ALTER TABLE yonetim_doktor ADD yas')
<sqlite3.Cursor object at 0x9fa0920>
>>> db.commit()
>>> db.close()
Veritabanına yaş alanını eklemiş olduk. Yönetim panelinden girerek kontrol edebilirsiniz. Doktor tablosunda yaş alanını göreceksiniz. Şimdi yaş alanını Form'a da ekleyelim. DoktorFormu'nun son hali şu şekilde olacaktır.
# -*- coding: utf-8 -*-
from django import forms
from django.core.validators import MaxValueValidator, MinValueValidator

class DoktorFormu(forms.Form):
 adi  =  forms.CharField(label="Adınız")
 soyadi  =  forms.CharField(label="Soyadınız")
 yas  =  forms.IntegerField(label="Yaşınız",required=False,validators=[
  MaxValueValidator(70),
  MinValueValidator(30)
  ]
  )
 telefon =  forms.CharField(label = "Telefon Numaranız:",required=False)
 eposta  = forms.EmailField(label="E-Posta Adresiniz",required=False)

 def clean_telefon(self):
  tel = self.cleaned_data['telefon']
  if tel != "":
   if len(tel) != 11:
    raise forms.ValidationError('Telefon numarasi 11 karakter olmalidir.')
  return tel

Şimdi kaydetme işlemi yapabilmek için doktor_ekleme görünümünde
doktor.soyadi = temiz_veri['soyadi']
satırı altına şu satırı ekleyelim;
doktor.yas = temiz_veri.get('yas')
Tarayıcıdan doktor-ekle sayfasını açarsanız, artık yeni görünüm şu şekilde olacaktır.
Şimdi son olarak doktor_listesi.html şablonunu da değiştirerek yaşı alanını da kullanıcılara gösterelim.
<table border="1">
    <tr><td><a href="/doktor-ekle/">Doktor Ekle</a></td></tr>
    <tr>
        <th>Sıra</th>
        <th><a href="?siralama=1">Adi<a/></th>
        <th><a href="?siralama=2">Soyadi</a></th>
        <th>Yaş</th>
        <th>Telefon</th>
        <th>E-Posta</th>
        <th>İşlemler</th>
    </tr>

    {% for doktor in doktorlar %}
    <tr>
        <td>{{ doktorlar.start_index|add:forloop.counter }}</td>
        <td>{{ doktor.adi }}</td>
        <td>{{ doktor.soyadi }}</td>
        <td>{{ doktor.yas }}</td>
        <td>{{ doktor.telefon }}</td>
        <td>{{ doktor.eposta }}</td>

        <td><a href="/doktor-ekle/?id={{ doktor.id }}">Düzenle </a><a href="/doktor-sil/?id={{ doktor.id }}">Sil</a></td>
    </tr>
    {% endfor %}

</table>

Kaynakça

0 yorum :

Yorum Gönder