Изображения, которые были удалены из базы данных, также будут удалены из хранилища - PullRequest
1 голос
/ 26 октября 2011

У меня есть эти модели:

class Gallery(models.Model):
   HeadImage = models.ImageField(upload_to="gallery")

class Image(models.Model):
   Image = models.ImageField(upload_to="gallery")
   Gallery = models.ForeignKey(Gallery, related_name='images')

class Tour(models.Model):
   Name=models.CharField(max_length=100)
   Count=models.SmallIntegerField() 
   PriceUnit=models.ForeignKey(PriceUnit)
   Price=models.CharField(max_length=12)
   Gallery = models.OneToOneField(Gallery,editable=False)

, поскольку U может видеть, что у каждого тура есть галерея изображений, я разработал ModelForm, которая позволяет пользователю добавлять тур, это его код в views.py:

def addtour(request,key):
   ImageFormSet = inlineformset_factory(Gallery,Image, can_delete=False,extra=4)
   if request.method == 'POST':
      gform=GalleryForm(request.POST,request.FILES)
      if gform.is_valid():
         gallery=gform.save(commit=False)
         formset=ImageFormSet(request.POST, request.FILES, instance=gallery)
      if formset.is_valid():
         gallery.save()
         formset.save()
      tform = TourForm(request.POST, request.FILES)
      if tform.is_valid():
         tour=tform.save(commit=False)
         tour.ActionUserCode=User.objects.get(pk=1)
         tour.Gallery=gallery
         tour.save()
         return HttpResponseRedirect(reverse('airAgency.views.edittour', args=[agn.WebSite,tour.pk]))#'airAgency/edittour/%i/' % (tour.pk))
   else:
      tform = TourForm()
      gform=GalleryForm()
      galleryinstance=Gallery()
      formset=ImageFormSet(instance=galleryinstance)
   return render_to_response('airAgency/addtour.html', {'tform': tform,'gform':gform,'formset':formset})

, как U может видеть в представлениях, после добавления тура пользователь перенаправляется на страницу edittour. Теперь я хочу, чтобы пользователь на странице edittour удалил тур или когда изображения, принадлежащие его галерее, были удалены,Изображения должны быть удалены из хранилища в дополнение к удалению из базы данных. Как я могу справиться с этим?

1 Ответ

1 голос
/ 26 октября 2011

Вы можете переопределить метод delete () в модели, чтобы сделать то, что вы хотите.

https://docs.djangoproject.com/en/dev/topics/db/models/#overriding-predefined-model-methods

class Image:
    #other code is here

    def delete(self, *args, **kwargs):
        #code to remove from file system goes here
        super(Image, self).delete(*args, **kwargs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...