diff --git a/oscar/core/compat.py b/oscar/core/compat.py index a84ba067f55..43103328c53 100644 --- a/oscar/core/compat.py +++ b/oscar/core/compat.py @@ -37,9 +37,6 @@ def get_user_model(): raise ImproperlyConfigured("AUTH_USER_MODEL must be of the form" " 'app_label.model_name'") -_user_fields = get_user_model()._meta.fields -VALID_USER_FORM_FIELD_NAMES = set([field.name for field in _user_fields]) - def existing_user_fields(fields): """ @@ -47,8 +44,17 @@ def existing_user_fields(fields): longer safe to assume the User model has certain fields. This helper function assists in writing portable forms Meta.fields definitions when those contain fields on the User model + + Usage: + class UserForm(forms.Form): + ... + class Meta: + # won't break if first_name is not defined on User model + fields = existing_user_fields(['first_name', 'last_name']) """ - return list(set(fields) & VALID_USER_FORM_FIELD_NAMES) + user_fields = get_user_model()._meta.fields + user_field_names = [field.name for field in user_fields] + return list(set(fields) & set(user_field_names)) # # Python3 compatibility layer diff --git a/tests/integration/customer/test_custom_user_model.py b/tests/integration/customer/test_custom_user_model.py index 32d54bace73..ccd985110b8 100644 --- a/tests/integration/customer/test_custom_user_model.py +++ b/tests/integration/customer/test_custom_user_model.py @@ -1,12 +1,12 @@ from django.test import TestCase from oscar.apps.customer.forms import ProfileForm -from oscar.core import compat +from oscar.core.compat import get_user_model, existing_user_fields -class TestCustomUserModel(TestCase): +class TestACustomUserModel(TestCase): def setUp(self): - self.user_klass = compat.get_user_model() + self.user_klass = get_user_model() def test_can_be_created_without_error(self): try: @@ -14,8 +14,8 @@ def test_can_be_created_without_error(self): except Exception, e: self.fail("Unable to create user model: %s" % e) - def test_extra_field_is_picked_up(self): - self.assertTrue('extra_field' in compat.VALID_USER_FORM_FIELD_NAMES) + def test_extra_field_is_accessible(self): + self.assertTrue('extra_field' in existing_user_fields(['extra_field'])) self.assertTrue(hasattr(self.user_klass(), 'extra_field')) def test_profile_form_doesnt_expose_extra_field(self):