Как расширить команду управления duango createuperuser? - PullRequest
0 голосов
/ 24 января 2019

Я расширил свою модель пользователя, добавив обязательное поле Company, чтобы каждый пользователь принадлежал к какой-либо компании.Поле Company является внешним ключом для другой модели, которая определяет, что представляет собой компания.

Это прекрасно работает, за исключением того факта, что ./manage createsuperuser сломался, так как он не знает, добавить ли этот пользовательский обязательный параметрfield.

Оказывается, я могу добавить REQUIRED_FIELDS = ['company'] к моей пользовательской модели пользователя, которая скажет createsuperuser запросить это поле.Это лучше, но поскольку поле компании является Внешним ключом, оно запрашивает идентификатор компании, который должен быть найден любым пользователем с помощью команды createsuperuser - не совсем удобным для пользователя.Я хочу, чтобы все администраторы, созданные с помощью команды createsuperuser, принадлежали одной и той же компании, и эта компания создавалась автоматически, если ее не существует.

Чтение документации от django по createuperuser в нем упоминается именно то, что я хочу сделать, и точная причина, по которой я хочу это сделать:

Вы можете создать подкласс команды управления и переопределить get_input_data (), если вы хотите настроить ввод и проверку данных,Обратитесь к исходному коду за подробной информацией о существующей реализации и параметрах метода.Например, это может быть полезно, если у вас есть ForeignKey в REQUIRED_FIELDS и вы хотите разрешить создание экземпляра вместо ввода первичного ключа существующего экземпляра.

Я просто не уверен, где в моемЯ должен переопределить метод get_input_data ().

Редактировать:

Я расширил пользовательскую модель, добавив ее в models.py одного из моих приложений (login_app):

class User(AbstractUser):
    company = models.ForeignKey(Company, on_delete=models.CASCADE, blank=False, null=False)

и добавив это в settings.py:

AUTH_USER_MODEL = 'login_app.User'

1 Ответ

0 голосов
/ 24 января 2019

Вам необходимо создать собственную команду, см. Соответствующую документацию Django здесь .Попробуйте что-то вроде ниже:

from django.contrib.auth.management.commands import createsuperuser

class Command(createsuperuser.Command):
    def get_input_data(self, field, message, default=None):
        """
        Override this method if you want to customize data inputs or
        validation exceptions.
        """
        raw_value = input(message)
        if default and raw_value == '':
            raw_value = default
        try:
            val = field.clean(raw_value, None)
        except exceptions.ValidationError as e:
            # here you FK code 

        return val
...