File tree Expand file tree Collapse file tree 2 files changed +23
-4
lines changed
Expand file tree Collapse file tree 2 files changed +23
-4
lines changed Original file line number Diff line number Diff line change 1+ from ..utils import get_model_fields
2+ from .models import Film , Reporter
3+
4+
5+ def test_get_model_fields_no_duplication ():
6+ reporter_fields = get_model_fields (Reporter )
7+ reporter_name_set = set ([field [0 ] for field in reporter_fields ])
8+ assert len (reporter_fields ) == len (reporter_name_set )
9+
10+ film_fields = get_model_fields (Film )
11+ film_name_set = set ([field [0 ] for field in film_fields ])
12+ assert len (film_fields ) == len (film_name_set )
Original file line number Diff line number Diff line change @@ -21,8 +21,12 @@ class LazyList(object):
2121 DJANGO_FILTER_INSTALLED = False
2222
2323
24- def get_reverse_fields (model ):
24+ def get_reverse_fields (model , local_field_names ):
2525 for name , attr in model .__dict__ .items ():
26+ # Don't duplicate any local fields
27+ if name in local_field_names :
28+ continue
29+
2630 # Django =>1.9 uses 'rel', django <1.9 uses 'related'
2731 related = getattr (attr , 'rel' , None ) or \
2832 getattr (attr , 'related' , None )
@@ -44,15 +48,18 @@ def maybe_queryset(value):
4448
4549
4650def get_model_fields (model ):
47- reverse_fields = get_reverse_fields (model )
48- all_fields = [
51+ local_fields = [
4952 (field .name , field )
5053 for field
5154 in sorted (list (model ._meta .fields ) +
5255 list (model ._meta .local_many_to_many ))
5356 ]
5457
55- all_fields += list (reverse_fields )
58+ # Make sure we don't duplicate local fields with "reverse" version
59+ local_field_names = [field [0 ] for field in local_fields ]
60+ reverse_fields = get_reverse_fields (model , local_field_names )
61+
62+ all_fields = local_fields + list (reverse_fields )
5663
5764 return all_fields
5865
You can’t perform that action at this time.
0 commit comments