4. Python-Django ile e-Ticaret Sitesi yapımı- Resim ekleme-Bir öğeye ait birden fazla resmin eklenmesi

 Aslında  burada yapılmak istenen şudur; sitenizde bir ürün var ve bu ürünü tanıtan farklı açılardan görünmesini sağlayan birden fazla resim olması gerekiyor. Şimdi bu sistemin django framework ile nasıl oluşturulabileceğini görelim.

Bu işlemler için aşağıdaki sırayı takip edebilirsiniz.

1. Evet planlama çok önemli. Bu noktada nasıl plan işleyiş söz konusu görelim. Örneğimiz kolay anlaşılması için bir ürün üzerinden olsun. Ürünümüz bir akıllı telefon olsun. Akıllı telefon ürünü sitenizde bir kategoriye ait olması beklenir. Böyle ise nasıl bir yorum yapabiliriz? Diyebiliriz ki; Kategori ile ürün bilgisi arasında bağlantıyı sağlayan anahtar bir  öğşe olması gerekir. Biz buna öğeye id lerle ifade ediyoruz. Bu id leri django framework ü bizim için otomatik üretir(model geliştirirken otomatik yapılır ). Gelelim bizim bu yazıda yapmak istediğimiz kısma biz ürün bilgisi( bu örnekte akıllı telefon) ile ürüne ait resimlerin bulunduğu ayrı fakat birbiri ile ilişkili bir tablo düşünmemiz gerekir. Tıpkı az önce açıklamaya çalıştığımız  kategori-ürün bilgisi tablosu ilişkisi gibi ürün bilgisi-ürün galerisi gibi iki farklı tablo arasından bir id ile ilişki kurulması gerekir. 

Yukarıda anlatmaya çalıştığımız senaryonun kodlarını yazalım. Bunun için django framework ün veritabanı tablosunun otomatik hazırlanması için product_urun app içindeki model.py içinde kodlarımızı ekleyelim.

product_urun app -model.py içine modelimizi oluşturalım:

class ImagesGal(models.Model):

product = models.ForeignKey(Product, on_delete=models.CASCADE)
title = models.CharField(max_length=30)
image = models.ImageField(blank=True, upload_to='images/')


def __str__(self):
return self.title

NOT: Kodda geçen def __str__ (self): ile ilgili metod bize sınıfın içinde yer alan metodun sınıfın ismini yani title nı döndürmeyi sağlar. Bu metodun ayrıntılı kullanımını Python da OOP de dunder metod olarak arama yapıp geniş bilgi edinebilirsiniz.

Unutmayın bir model oluşturduk bu modelin projemizin veritabanında bir tablo karşılığı otomatik oluşacak. Bu işlem için Terminali açıp makemigrations ve migrate komutlarını uygulayın. Bunların nasıl yapıldığı blog uygulamasındaki örneklerden bakabilirsiniz. Kullanımı oradaki ile aynıdır.

2. Oluşturduğumuz bu modeli admin tarafında görmek elbette isteriz bu işlemi yapalım. Resim galeri ekleme işinin adminde gösterilmesi için yazılması gereken kodlardır.


product_urun app -admin.py içerisindeki kodlar:

......
from product_urun.models import ..., ....., ImagesGal
# Register your models here.


class KategoriAdmin(admin.ModelAdmin):
....


class ProductAdmin(admin.ModelAdmin):
...


class ImagesGalAdmin(admin.ModelAdmin):
list_display = [
'title', 'product', 'image']


...
...
admin.site.register(ImagesGal
, ImagesGalAdmin)

3. Artık projenizi run edip sitenizde admin paneline geçip resim galerisi için deneme resimleri ekleyip. Yaptığınız kodların çalışıp çalışmadığını test edebilirsiniz.(RUNSER işini artık blog yapımı serimizde ayrıntılı değinmiştik ordan bakabilirsiniz.)

4. Ürün bilgisini girerken bir resim ekleyebiliyorduk şimdi ise daha fazla resim eklenmesi ile ilgili modelimizi yukarıdaki işlemleri uygulayarak daha fazla resmi admin de ekleyebildik. Ama bunlar bize admin da ayrı tablolar gibi görünüyor ama ilişkili bir tablo yapmıştık. 

Şimdiki adımda daha kullanışlı olması için ürün bilgisi girerken aynı zamanda resim galerisi de eklemek istersek(veya bir ürüne ait  daha fazla resim ekleme işini adminde ürün eklemin içine eklemeyi görelim.)

Bu işlem için 

product_urun app -admin.py dosyasına aşağıdaki kodlar eklenir.(öncelikle bu dosyada ProductImageInline isimli bir sınıf  tanımlandığına dikkat edin.)


class ProductImageInline(admin.TabularInline): # adminde ürün eklerken 
aynı zamanda ürüne ait resim galerisi tablosuna ulaşıracak
model = ImagesGal
resimEk = 5

class ProductAdmin(admin.ModelAdmin):
...
....
inlines = [ProductImageInline]






Yorum Gönder

0 Yorumlar