Skip to content

QuerySet inharitance in django-polymorphic #145

@fed239

Description

@fed239

I'd like to add filter_by_user methods to all QuerySet classes defined for child polymorphic models and use them to filter objects of every model when called for the base model. filter_by_user methods may be different for different child models. Is this possible?

I tried like in the following code but it didn't work.

class MyBaseQuerySet(PolymorphicQuerySet):
    def filter_by_user(self, user):
        return self.all()


class MyBaseModel(PolymorphicModel):
    ...
    objects = PolymorphicManager(MyBaseQuerySet)


class MyChild1QuerySet(MyBaseQuerySet):
    def filter_by_user(self, user):
        return self.filter(fieldA__lt=user.profile.propA)


class MyChild1Model(MyBaseModel):
    fieldA = models.IntegerField()
    ...
    objects = PolymorphicManager(MyChild1QuerySet)


class MyChild2QuerySet(MyBaseQuerySet):
    def filter_by_user(self, user):
        return self.filter(fieldB__gt=user.profile.propB)


class MyChild2Model(MyBaseModel):
    fieldB = models.IntegerField()
    ...
    objects = PolymorphicManager(MyChild2QuerySet)

When I call MyBaseModel.objects.filter_by_user(john) magic doesn't happen and only base queryset filter_by_user is called.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions