Pytest-django: لا يحب admin_user تعيين django_username_field على البريد الإلكتروني

تم إنشاؤها على ١٨ يونيو ٢٠١٧  ·  6تعليقات  ·  مصدر: pytest-dev/pytest-django

أنا أستخدم https://github.com/tmm/django-username-email الذي يستخدم البريد الإلكتروني بدلاً من وجود اسم مستخدم منفصل ، وهذا يعمل بشكل جيد بشكل عام ولكنه يكسر admin_user fixture لأن هذا:

if username_field != 'username':
    extra_fields[username_field] = 'admin'

يؤدي إلى هذا

user = UserModel._default_manager.create_superuser(
    'admin', '[email protected]', 'password', **extra_fields)

رفع هذا

TypeError: create_superuser() got multiple values for argument 'email'

التعليق الأكثر فائدة

في حالتي ، كان لدي بالفعل طريقة UserModel._default_manager.create_superuser معدلة لا تستخدم وسيطة اسم المستخدم. هذا ما تميل إلى فعله إذا كان لديك UserModel مخصص لا يحتوي على حقل اسم مستخدم (ولكن حقل بريد إلكتروني).

لذا ، فإن تغيير الكود الخاص بك أفضل بالفعل ، لكنه لا يغطي الحالة عندما لا يكون لديك حقل اسم مستخدم. وهو أمر محل نقاش على أي حال ، لأنه لا يمكنك تغطية جميع الحالات المخصصة بالطبع. شكرا للمتابعة.

ال 6 كومينتر

لدي نفس المشكلة.

لم تجد حلا لهذا؟

لقد تجاوزت admin_user fixture في conftest.py ، فأنت تعلن فقط عن وظيفة هناك بالاسم نفسه. منجم يشبه:

@pytest.fixture()
def admin_user(db, django_user_model, django_username_field):
    """A Django admin user.

    This uses an existing user with username 'admin', or creates a new one with
    password 'password'.
    """
    UserModel = django_user_model
    username_field = django_username_field

    try:
        user = UserModel._default_manager.get(**{username_field: '[email protected]'})
    except UserModel.DoesNotExist:
        extra_fields = {}
        user = UserModel._default_manager.create_superuser(
            '[email protected]', 'password', **extra_fields)
    return user

نعم ، لقد قمت أيضًا بالكتابة فوقه. من السهل القيام به. يبدو أن مؤلفي pytest-django بذلوا جهدًا لجعله يعمل في الحالة التي يكون فيها اسم المستخدم = البريد الإلكتروني ، ولكن في الممارسة العملية ، هذا لا يعمل.

تم تغيير الكود في هذا الصدد: https://github.com/blueyed/pytest-django/blob/33617687f185fecf04bf4bdd99017289078f52df/pytest_django/fixture.py#L261 -L262

عبر https://github.com/pytest-dev/pytest-django/commit/a3dc56d895b73738ff81b08c87ea68a0394984e0

لذا أفترض أن هذا (أو على الأقل المشكلة الأصلية) قد تم إصلاحه؟

في حالتي ، كان لدي بالفعل طريقة UserModel._default_manager.create_superuser معدلة لا تستخدم وسيطة اسم المستخدم. هذا ما تميل إلى فعله إذا كان لديك UserModel مخصص لا يحتوي على حقل اسم مستخدم (ولكن حقل بريد إلكتروني).

لذا ، فإن تغيير الكود الخاص بك أفضل بالفعل ، لكنه لا يغطي الحالة عندما لا يكون لديك حقل اسم مستخدم. وهو أمر محل نقاش على أي حال ، لأنه لا يمكنك تغطية جميع الحالات المخصصة بالطبع. شكرا للمتابعة.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات