Форум сайта python.su
Суть вопроса такова!
У нас иметься модель, класс в которой имеет поле ImageField которое абсолютно нормально загружает на сервер картинки. Проблема что при удалении нашей записи из базы через checkbox в списке записей, из базы всё удалятся кроме картинки на сервере. Необходимо удалить картинку вместе с записью.
Поискав в интернете нашел очень и очень много способов, но как-то не могу понять какой лучше, и как реализовать это!
На всякий случай модель
#models.py
from django.db import models
from django.contrib import admin
class Freezer(models.Model):
name = models.CharField(max_length = 250)
picture = models.ImageField(upload_to='photos')
descriprion_ru = models.TextField()
descriprion_en = models.TextField()
price = models.TextField(max_length = 15)
timestamp = models.DateField()
def delete(self, using=None):
try:
obj = Freezer.objects.get(pk=self.pk)
obj.picture.delete()
except (Freezer.DoesNotExist, ValueError):
pass
super(Freezer, self).delete()
class Contacts(models.Model):
mobile_number = models.CharField(max_length = 10)
office_number = models.CharField(max_length = 9)
e_mail = models.EmailField()
skype = models.CharField(max_length = 30)
adress = models.CharField(max_length = 50)
class FreezerAdmin(admin.ModelAdmin):
list_display = ('name','price','timestamp')
class ContactAdmin(admin.ModelAdmin):
list_display = ('mobile_number','office_number','e_mail','skype','adress')
admin.site.register(Freezer, FreezerAdmin)
admin.site.register(Contacts, ContactAdmin)
Отредактировано [NK]_Jezz (Ноя. 28, 2012 18:58:10)
Офлайн
Делайте через сигналы: https://docs.djangoproject.com/en/1.4/topics/signals/
Офлайн
Если не ошибаюсь то через сигналы получится тот же аналог но другим методом, мне же нужно изменить поведение админки!
Офлайн
Ошибаетесь. Читайте документацию.
Офлайн
Столкнулся с подобной проблемой..
данный паблик конечно же уже старый.. но вдруг пригодится начинающим
#models.py from django.db import models from django.contrib import admin class Freezer(models.Model): name = models.CharField(max_length = 250) picture = models.ImageField(upload_to='photos') descriprion_ru = models.TextField() descriprion_en = models.TextField() price = models.TextField(max_length = 15) timestamp = models.DateField() #def delete(self, using=None): # try: # obj = Freezer.objects.get(pk=self.pk) # obj.picture.delete() # except (Freezer.DoesNotExist, ValueError): # pass # super(Freezer, self).delete() @receiver(post_delete, sender=Freezer) def freezer_post_delete_handler(sender, **kwargs): freezer = kwargs['instance'] storage, path = freezer.picture.storage, freezer.picture.path storage.delete(path)
Офлайн