2010-01-07 15 views
6

silmez bir model güncellemek:Django - Bir FileField bir model vardır django ile bir uygulama, uygulamak am eski FileField

class Slideshow(models.Model): 
    name = models.CharField(max_length=30,unique=True) 
    thumbnail = models.FileField(max_length=1000,upload_to="images/app/slideshows/thumbnails") 

ve Django modellerini yöneten bir yönetici arka uç var. Sadece dosya admin.py eklendi ve Django arka uç olarak beni

from django.contrib import admin 

from apps.gallery.models import Slideshow 

admin.site.register(Slideshow) 

için, slayt ekleme, silme ve güncelleme yapmak mümkün olan her şeyi yönetir. Ancak, bir slayt gösterisini güncellemeyi ve özellik küçük resmini [FileField] değiştirmeyi denediğimde, django eski dosyayı silmez. Sonuç olarak, birkaç güncellemeden sonra sunucu, gereksiz olan birçok dosya ile doldurulur. Soruma şudur: django bu dosyaları bir güncellemeden sonra otomatik olarak nasıl silebilir?

Gerçekten Django tasarımı yapar eminim yardımına

cevap

1

memnun olurum. Örneğin, başka bir modelin bu dosyayı kullanıp kullanamayacağını bilemez. Dosyanın kalmasını beklediyseniz ve django'nun onu sildiğini keşfettiyseniz gerçekten çok şaşırdınız! Bununla birlikte, dosya alanını değiştirir değiştirmez, eski dosya adını kaybedersiniz de sorun da vardır.

o sorunla ilgili açık biletin var: http://code.djangoproject.com/ticket/11663

önceki dosya adını depolamak için __set__ geçersiz kılmak gösterilmiştir http://code.djangoproject.com/ticket/2983 bir yama var. Daha sonra modelinizin __save__ yöntemini silmek için önceki dosya adına erişebilirsiniz.

+0

Evet, haklısınız - Sonunda

bu sorunu sloves, hangi uygulamayı geliştiren! Django geliştiricileri, yeni sürümlerde bu dava için yeni bir tasarımda çalışıyor görünmektedir. Seçeneklerden biri, dosyalarda dosyaların değiştirilebilmesi için FileFields'da ek bir seçenek eklemektir: http://groups.google.com/group/django-developers/browse_thread/thread/491619541ba6ac75 Bu fikri destekliyorum, " Yardımınız için teşekkürler Seth "Bana anlattığın o yamayu kullanabilirim. – raulsan

+0

Başka bir fikriniz vardı - 'fileField'ınıza ** show_hidden_initial ** seçeneğini eklemeyi deneyebilirsiniz. Muhtemelen bu, yeni bir dosya yüklenmeden önce 'FileField''ın orijinal değerine erişmenizi sağlar. – Seth

2

Bu problem hakkında çok düşündüm ve sonuçta benim için iyi olandan daha iyi bir çözüm buluyorum. Tüm modelleri projede bulabilir ve pre_save ve post_delete sinyallerini bunlara bağlayabilirsiniz. django-cleanup

+0

Harika bir çözüm gibi görünüyor. Artık django üzerinde çalışmıyorum ve bunu test edemiyorum ama katkılarınız için teşekkür ederim, un1t! – raulsan