Найти - Пользователи
Полная версия: Удаление записи и файла с сервера через админку!
Начало » Django » Удаление записи и файла с сервера через админку!
1
[NK]_Jezz
Суть вопроса такова!
У нас иметься модель, класс в которой имеет поле 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)

Хотелось бы стандартными методами, без дополнительных библиотек.

Удаление получается если только заходить в редактирование записи и там удалять.
Нужно как-то изменить поведение админки чтобы можно было удалить массой!

Пробовал различными способами переопределения методов удаления но не получается!
Dr.Livsi
Делайте через сигналы: https://docs.djangoproject.com/en/1.4/topics/signals/
[NK]_Jezz
Если не ошибаюсь то через сигналы получится тот же аналог но другим методом, мне же нужно изменить поведение админки!
Dr.Livsi
Ошибаетесь. Читайте документацию.
wedoca
Столкнулся с подобной проблемой..
данный паблик конечно же уже старый.. но вдруг пригодится начинающим

#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)

работает для удаление на странице со списком элементов, так и в детальном просмотре (в админке)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB