জাজানো 2.x সমাধান:
জ্যাঙ্গো 2 এ ফাইল মোছার বিষয়টি পরিচালনা করা খুব সহজ । আমি জ্যাঙ্গো 2 এবং এসএফটিপি স্টোরেজ এবং এফটিপি স্টোরেজ ব্যবহার করে সমাধান অনুসরণ করার চেষ্টা করেছি এবং আমি নিশ্চিত যে এটি যে কোনও স্টোরেজ ম্যানেজারের সাথে কাজ করবে যা deleteপদ্ধতি প্রয়োগ করেছে । ( deleteপদ্ধতি হ'ল storageবিমূর্ত পদ্ধতিগুলির মধ্যে একটি))
deleteমডেলটির পদ্ধতিটি এমনভাবে ওভাররাইড করুন যাতে উদাহরণটি নিজেকে মুছে ফেলার আগে ফাইল ফাইলগুলি মুছে দেয়:
class Song(models.Model):
name = models.CharField(blank=True, max_length=100)
author = models.ForeignKey(User, to_field='id', related_name="id_user2")
song = models.FileField(upload_to='/songs/')
image = models.ImageField(upload_to='/pictures/', blank=True)
date_upload = models.DateField(auto_now_add=True)
def delete(self, using=None, keep_parents=False):
self.song.storage.delete(self.song.name)
self.image.storage.delete(self.song.name)
super().delete()
এটি আমার পক্ষে বেশ সহজ কাজ করে। আপনি যদি মুছে ফেলার আগে ফাইলটি বিদ্যমান কিনা তা পরীক্ষা করতে চান, আপনি ব্যবহার করতে পারেন storage.exists। যেমন গান উপস্থিত থাকলে self.song.storage.exists(self.song.name)একটি booleanপ্রতিনিধিত্ব করে ফিরিয়ে দেবে । সুতরাং এটি এর মতো দেখাবে:
def delete(self, using=None, keep_parents=False):
storage = self.song.storage
if storage.exists(self.song.name):
storage.delete(self.song.name)
if storage.exists(self.image.name):
storage.delete(self.song.name)
super().delete()
সম্পাদনা (সংযোজন):
@ হাইম্যান যেমন উল্লেখ করেছেন, এই সমাধান কলিংয়ের মাধ্যমে Song.objects.all().delete()ফাইলগুলি মুছবে না! এটি ঘটছে কারণ ডিফল্ট ম্যানেজারেরSong.objects.all().delete() মোছা ক্যোয়ারী চলছে । সুতরাং আপনি যদি পদ্ধতিগুলি ব্যবহার করে কোনও মডেলের ফাইলগুলি মুছতে সক্ষম হতে চান তবে আপনাকে অবশ্যই একটি কাস্টম ম্যানেজার লিখতে হবে এবং ব্যবহার করতে হবে (কেবল এটির মুছার প্রশ্নটি ওভাররাইড করার জন্য):objects
class CustomManager(models.Manager):
def delete(self):
for obj in self.get_queryset():
obj.delete()
এবং CustomManagerমডেলটি নির্ধারণের জন্য , আপনাকে অবশ্যই objectsআপনার মডেলের অভ্যন্তর প্রারম্ভিক :
class Song(models.Model):
name = models.CharField(blank=True, max_length=100)
author = models.ForeignKey(User, to_field='id', related_name="id_user2")
song = models.FileField(upload_to='/songs/')
image = models.ImageField(upload_to='/pictures/', blank=True)
date_upload = models.DateField(auto_now_add=True)
objects = CustomManager()
def delete(self, using=None, keep_parents=False):
self.song.storage.delete(self.song.name)
self.image.storage.delete(self.song.name)
super().delete()
এখন আপনি যে .delete()কোনও objectsউপ-প্রশ্নের শেষে ব্যবহার করতে পারেন । আমি সহজতম লিখেছি CustomManager, তবে আপনি মুছে ফেলা জিনিস বা আপনি যা চান তার কিছু ফিরিয়ে দিয়ে আপনি এটি আরও ভাল করতে পারেন।