Исключить определенные поля для пользователей, которые являются суперпользователями - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь создать пользовательскую модель пользователя и иметь такие параметры, как дата рождения, текущий уровень и другие подобные параметры. Когда я запускаю python manage.py createsuperuser, выдает ошибку, говоря, что эти значения не могут быть нулевыми. Я не хочу эти параметры для учетной записи суперпользователя. Что мне делать?

Я попытался добавить следующую строку в класс, который наследуется от класса UserAdmin exclude = ('date_of_birth', 'currentLevel', 'totalStars', 'badges')

Это модель полей

class Learner(AbstractBaseUser):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    email = models.EmailField(max_length=255, unique=True)
    date_of_birth = models.DateField(auto_now=False, auto_now_add=False)

    currentLevel = models.ForeignKey(SubLevelConcepts, related_name='currentLevel', on_delete=models.CASCADE)
    totalStars = models.IntegerField(default=0)
    badges = models.IntegerField(default=0)

    active = models.BooleanField(default=True)
    staff = models.BooleanField(default=False)
    superuser = models.BooleanField(default=False)

    objects = LearnerManager()

Это админ класс

class LearnerAdmin(UserAdmin):

    add_form = LearnerCreationForm
    form = LearnerChangeForm

    model = Learner

    exclude = ('date_of_birth', 'currentLevel', 'totalStars', 'badges')

    list_display = (
        'first_name',
        'last_name',
        'email',
        'staff',
        'active'
        )
    list_filter = (
        'email',
        'active'
    )
    fieldsets = (
        (None, {'fields': ('email', 'password',)}),
        ('Permissions', {'fields': ('staff', 'active')}),
    )

    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('email', 'first_name', 'last_name','password1', 'passsword2', 'staff', 'active')}
        )
    )

    search_fields = ('email',)
    ordering = ('id',)
    filter_horizontal = ()

Это последняя ошибка при запуске python manage.py createsuperuser

django.db.utils.IntegrityError: (1048, "Column 'currentLevel_id' cannot be null")

Я хочу, чтобы суперпользователь просто взял электронную почту и пароль и закончил работу. Я добавлю имя и фамилию позже

1 Ответ

0 голосов
/ 17 июня 2019

Добавьте null=True и default=None в свое поле ForeignKey, так что оно не требуется, т. Е.

class Learner(AbstractBaseUser):
    # ...
    currentLevel = models.ForeignKey(SubLevelConcepts, null=True, related_name='currentLevel', on_delete=models.CASCADE)

Вы также можете использовать models.PROTECT или models.SET_NULL вместо models.CASCADE - если вы действительно не хотите, чтобы учетные записи пользователей удалялись при удалении их соответствующих SubLevelConcept, то есть ...

И вы также можете проверить параметр поля blank=True models FWIW.

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