Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Удаление записи и файла с сервера через админку! [RSS Feed]

#1 Ноя. 28, 2012 13:50:25

[NK]_Jezz
От:
Зарегистрирован: 2012-03-05
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление записи и файла с сервера через админку!

Суть вопроса такова!
У нас иметься модель, класс в которой имеет поле 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)

Офлайн

#2 Ноя. 30, 2012 14:07:53

Dr.Livsi
От:
Зарегистрирован: 2010-02-15
Сообщения: 192
Репутация: +  3  -
Профиль   Отправить e-mail  

Удаление записи и файла с сервера через админку!

Делайте через сигналы: https://docs.djangoproject.com/en/1.4/topics/signals/



Офлайн

#3 Дек. 1, 2012 23:19:21

[NK]_Jezz
От:
Зарегистрирован: 2012-03-05
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление записи и файла с сервера через админку!

Если не ошибаюсь то через сигналы получится тот же аналог но другим методом, мне же нужно изменить поведение админки!



Офлайн

#4 Дек. 4, 2012 06:34:24

Dr.Livsi
От:
Зарегистрирован: 2010-02-15
Сообщения: 192
Репутация: +  3  -
Профиль   Отправить e-mail  

Удаление записи и файла с сервера через админку!

Ошибаетесь. Читайте документацию.



Офлайн

#5 Авг. 19, 2015 12:22:22

wedoca
Зарегистрирован: 2015-07-23
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление записи и файла с сервера через админку!

Столкнулся с подобной проблемой..
данный паблик конечно же уже старый.. но вдруг пригодится начинающим

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

работает для удаление на странице со списком элементов, так и в детальном просмотре (в админке)

Офлайн

  • Начало
  • » Django
  • » Удаление записи и файла с сервера через админку![RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version