** аргумент extra_fields в Django - PullRequest
2 голосов
/ 20 апреля 2020

Я пытаюсь создать пользовательскую модель пользователя в Django, используя эту статью

И в этой статье указан менеджер моделей:

from django.contrib.auth.base_user import BaseUserManager
from django.utils.translation import ugettext_lazy as _


class CustomUserManager(BaseUserManager):
    """
    Custom user model manager where email is the unique identifiers
    for authentication instead of usernames.
    """
    def create_user(self, email, password, **extra_fields):
        """
        Create and save a User with the given email and password.
        """
        if not email:
            raise ValueError(_('The Email must be set'))
        email = self.normalize_email(email)
        user = self.model(email=email, **extra_fields)
        user.set_password(password)
        user.save()
        return user

    def create_superuser(self, email, password, **extra_fields):
        """
        Create and save a SuperUser with the given email and password.
        """
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)
        extra_fields.setdefault('is_active', True)

        if extra_fields.get('is_staff') is not True:
            raise ValueError(_('Superuser must have is_staff=True.'))
        if extra_fields.get('is_superuser') is not True:
            raise ValueError(_('Superuser must have is_superuser=True.'))
        return self.create_user(email, password, **extra_fields)

Что я не понимаю, так это **extra_fields, передаваемый в качестве аргумента в функции create_user и create_superuser.

Что такое **extra_fileds ?? Какова цель этого и что он здесь делает ??

Заранее спасибо !!

Ответы [ 3 ]

1 голос
/ 20 апреля 2020

Согласно упомянутой документации по методу здесь :

The ``extra_fields`` keyword arguments are passed through to the
:class:`~django.contrib.auth.models.User`’s ``__init__`` method to
allow setting arbitrary fields on a :ref:`custom user model

По сути, это то же самое, что любой аргумент произвольного ключевого слова в любой функции. Вы можете передать любые аргументы ключевого слова с помощью метода create_user или create_superuser, и экземпляр User будет создан на основе этих аргументов (если они существуют в модели User).

1 голос
/ 20 апреля 2020

Это известно как kwarg, оно позволяет передавать произвольное количество аргументов ключевого слова. Таким образом, в вашем случае вы можете передать любые другие поля в функцию, и они будут сохранены в вашей модели, если они существуют с тем же именем.

Проверьте это SO: Какова цель и использование ** kwargs

0 голосов
/ 20 апреля 2020

**extra_fields используется для того, чтобы любое количество ключевых слов аргумента (kwarg) могло быть передано как функциям create_user, так и create_superuser. Поэтому, если аргументы, переданные в create_user и create_superuser, присутствуют в связанной пользовательской модели пользователя, то пользователь Модель будет создана со всей этой информацией.

Она также используется для доступа к встроенным полям модели пользователя по умолчанию, таким как is_superuser, is_staff и is_active, и присваивает им значение по умолчанию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...