2011-10-26 73 views
1

我有這些模型:圖像,從存儲中刪除,也

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 page.now我想,當用戶在edittour頁面上刪除旅遊或當圖像屬於它的圖庫被刪除時,除了從數據庫中刪除圖像外,圖像將從存儲中刪除。我可以ndle這個?

回答

1

您可以覆蓋模型上的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) 
+0

所以,我怎樣才能從存儲刪除相關的圖像,同時從數據庫中刪除他們,overrided save()方法? –

+1

不知道爲什麼你不只是谷歌它,但http://docs.python.org/library/os.html#os.remove – Jordan

+0

此外,我修改我的答案,以便它覆蓋delete()方法,而是比保存。 – Jordan