我有一个自定义的 Django 查询集类,我将其与自定义管理器一起使用,以通过链接轻松过滤对象。
我想向此类添加自定义方法以将其结果保存为文件。
但是,我不确定我这样做是否正确。 如何获取 as_file 方法中的对象列表?
class EntryQuerySet(models.QuerySet):
def as_file(self, filename='export.xls'):
# data = ??? how can I get results here??? print('exporting as {}'.format(filename))
def active(self):
return self.filter(status__in=[1, 4, 5])
def with_email(self):
return self.filter(contact__email__isnull=False)
def by_city(self, city):
return self.filter(address__city__icontains=city)
def in_next_days(self, days=7):
now = datetime.datetime.today()
delta = now + relativedelta.relativedelta(days=days)
return self.filter(start_date__gte=now, start_date__lte=delta)
def in_last_days(self, days=7):
now = datetime.datetime.today()
delta = now - relativedelta.relativedelta(days=days)
return self.filter(start_date__gte=delta, start_date__lte=now)
class EntryManager(models.Manager):
def get_queryset(self):
return EntryQuerySet(self.model, using=self._db)
def active(self):
return self.get_queryset().active()
def by_city(self, city):
return self.get_queryset().by_city(city)
def with_email(self):
return self.get_queryset().with_email()
def in_next_days(self, days):
return self.get_queryset().in_next_days(days)
def in_last_days(self, days):
return self.get_queryset().in_last_days(days)
我使用它如下:
entries = Entry.objects.active().by_city('My city').in_next_days(5)
我想要这样的东西:
entries = Entry.objects.active().by_city('My city').in_next_days(5).as_file('myfilename.xls')
我怎样才能做到这一点?
最佳答案
实际上,我发现它就像运行一样简单:
def as_file(self, filename='eksport.xls'):
data = self.all()
#do some processing here
关于python - Django 自定义查询集和导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47221517/