dease
dease

Reputation: 3076

Django custom queryset and export

I have a custom django queryset class, which I use together with custom manager to easly filter objects with chaining.

I wanted to add custom method to this class to save its result as a file.

However, I am not sure if I am doing it right. How can I get list of objects inside as_file method?

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)

I use this as follows:

entries = Entry.objects.active().by_city('My city').in_next_days(5)

And I want something like:

entries = Entry.objects.active().by_city('My city').in_next_days(5).as_file('myfilename.xls')

How can I achieve this?

Upvotes: 3

Views: 322

Answers (1)

dease
dease

Reputation: 3076

Actually, I found it so simple as running:

def as_file(self, filename='eksport.xls'):
    data = self.all()
    #do some processing here

Upvotes: 1

Related Questions