Re: [PATCH 2/7] REST: Simplify ModelMultiChoiceField
On Wed, 2018-05-09 at 01:23 +1000, Daniel Axtens wrote: > Stephen Finucane writes: > > > We're actually going to remove this shortly but the new technique works > > for both. > > For both what? Works for both the current approach and the approach we adopt in future patches. I think I should have removed '_get_filters' in this patch. Feel free to do so when applying. Stephen > Apart from that, this patch leaves ModelMultiChoiceField._get_filters() > as dead code, but it seems you do something with it later, so that's > fine. > > Regards, > Daniel > > > > > Signed-off-by: Stephen Finucane > > --- > > patchwork/api/filters.py | 23 +++ > > 1 file changed, 7 insertions(+), 16 deletions(-) > > > > diff --git a/patchwork/api/filters.py b/patchwork/api/filters.py > > index 25956e98..030f9af3 100644 > > --- a/patchwork/api/filters.py > > +++ b/patchwork/api/filters.py > > @@ -46,7 +46,10 @@ class ModelMultiChoiceField(ModelChoiceField): > > if value in self.empty_values: > > return None > > > > -filters = self._get_filters(value) > > +try: > > +filters = {'pk': int(value)} > > +except ValueError: > > +filters = {self.alternate_lookup: value} > > > > try: > > value = self.queryset.get(**filters) > > @@ -58,11 +61,7 @@ class ModelMultiChoiceField(ModelChoiceField): > > > > class ProjectChoiceField(ModelMultiChoiceField): > > > > -def _get_filters(self, value): > > -try: > > -return {'pk': int(value)} > > -except ValueError: > > -return {'linkname__iexact': value} > > +alternate_lookup = 'linkname__iexact' > > > > > > class ProjectFilter(ModelChoiceFilter): > > @@ -72,11 +71,7 @@ class ProjectFilter(ModelChoiceFilter): > > > > class PersonChoiceField(ModelMultiChoiceField): > > > > -def _get_filters(self, value): > > -try: > > -return {'pk': int(value)} > > -except ValueError: > > -return {'email__iexact': value} > > +alternate_lookup = 'email__iexact' > > > > > > class PersonFilter(ModelChoiceFilter): > > @@ -111,11 +106,7 @@ class StateFilter(ModelChoiceFilter): > > > > class UserChoiceField(ModelMultiChoiceField): > > > > -def _get_filters(self, value): > > -try: > > -return {'pk': int(value)} > > -except ValueError: > > -return {'username__iexact': value} > > +alternate_lookup = 'username__iexact' > > > > > > class UserFilter(ModelChoiceFilter): > > -- > > 2.14.3 > > > > ___ > > Patchwork mailing list > > Patchwork@lists.ozlabs.org > > https://lists.ozlabs.org/listinfo/patchwork ___ Patchwork mailing list Patchwork@lists.ozlabs.org https://lists.ozlabs.org/listinfo/patchwork
Re: [PATCH 2/7] REST: Simplify ModelMultiChoiceField
Stephen Finucane writes: > We're actually going to remove this shortly but the new technique works > for both. For both what? Apart from that, this patch leaves ModelMultiChoiceField._get_filters() as dead code, but it seems you do something with it later, so that's fine. Regards, Daniel > > Signed-off-by: Stephen Finucane > --- > patchwork/api/filters.py | 23 +++ > 1 file changed, 7 insertions(+), 16 deletions(-) > > diff --git a/patchwork/api/filters.py b/patchwork/api/filters.py > index 25956e98..030f9af3 100644 > --- a/patchwork/api/filters.py > +++ b/patchwork/api/filters.py > @@ -46,7 +46,10 @@ class ModelMultiChoiceField(ModelChoiceField): > if value in self.empty_values: > return None > > -filters = self._get_filters(value) > +try: > +filters = {'pk': int(value)} > +except ValueError: > +filters = {self.alternate_lookup: value} > > try: > value = self.queryset.get(**filters) > @@ -58,11 +61,7 @@ class ModelMultiChoiceField(ModelChoiceField): > > class ProjectChoiceField(ModelMultiChoiceField): > > -def _get_filters(self, value): > -try: > -return {'pk': int(value)} > -except ValueError: > -return {'linkname__iexact': value} > +alternate_lookup = 'linkname__iexact' > > > class ProjectFilter(ModelChoiceFilter): > @@ -72,11 +71,7 @@ class ProjectFilter(ModelChoiceFilter): > > class PersonChoiceField(ModelMultiChoiceField): > > -def _get_filters(self, value): > -try: > -return {'pk': int(value)} > -except ValueError: > -return {'email__iexact': value} > +alternate_lookup = 'email__iexact' > > > class PersonFilter(ModelChoiceFilter): > @@ -111,11 +106,7 @@ class StateFilter(ModelChoiceFilter): > > class UserChoiceField(ModelMultiChoiceField): > > -def _get_filters(self, value): > -try: > -return {'pk': int(value)} > -except ValueError: > -return {'username__iexact': value} > +alternate_lookup = 'username__iexact' > > > class UserFilter(ModelChoiceFilter): > -- > 2.14.3 > > ___ > Patchwork mailing list > Patchwork@lists.ozlabs.org > https://lists.ozlabs.org/listinfo/patchwork ___ Patchwork mailing list Patchwork@lists.ozlabs.org https://lists.ozlabs.org/listinfo/patchwork
[PATCH 2/7] REST: Simplify ModelMultiChoiceField
We're actually going to remove this shortly but the new technique works for both. Signed-off-by: Stephen Finucane --- patchwork/api/filters.py | 23 +++ 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/patchwork/api/filters.py b/patchwork/api/filters.py index 25956e98..030f9af3 100644 --- a/patchwork/api/filters.py +++ b/patchwork/api/filters.py @@ -46,7 +46,10 @@ class ModelMultiChoiceField(ModelChoiceField): if value in self.empty_values: return None -filters = self._get_filters(value) +try: +filters = {'pk': int(value)} +except ValueError: +filters = {self.alternate_lookup: value} try: value = self.queryset.get(**filters) @@ -58,11 +61,7 @@ class ModelMultiChoiceField(ModelChoiceField): class ProjectChoiceField(ModelMultiChoiceField): -def _get_filters(self, value): -try: -return {'pk': int(value)} -except ValueError: -return {'linkname__iexact': value} +alternate_lookup = 'linkname__iexact' class ProjectFilter(ModelChoiceFilter): @@ -72,11 +71,7 @@ class ProjectFilter(ModelChoiceFilter): class PersonChoiceField(ModelMultiChoiceField): -def _get_filters(self, value): -try: -return {'pk': int(value)} -except ValueError: -return {'email__iexact': value} +alternate_lookup = 'email__iexact' class PersonFilter(ModelChoiceFilter): @@ -111,11 +106,7 @@ class StateFilter(ModelChoiceFilter): class UserChoiceField(ModelMultiChoiceField): -def _get_filters(self, value): -try: -return {'pk': int(value)} -except ValueError: -return {'username__iexact': value} +alternate_lookup = 'username__iexact' class UserFilter(ModelChoiceFilter): -- 2.14.3 ___ Patchwork mailing list Patchwork@lists.ozlabs.org https://lists.ozlabs.org/listinfo/patchwork