Откуда берется это (Django) поле CustomUser?

Мои поиски привели только к советам о том, как добавить fields или add_fieldsets в admin.py при использовании Django's CustomUser. Мне нужно выяснить, откуда берется поле с именем admin, когда форма модели отображается в основанном на классе CreateView. В коде нет ошибки, но шаблон автоматически добавляет поле выбора admin в верхней части страницы - выпадающие варианты выбора - это уже созданные пользователи (все 3 типа). Но я хочу создать нового staff пользователя. Как мне сказать Django, чтобы он не добавлял поле admin (по крайней мере, пока пользователь не будет сохранен)?

# models.py
class CustomUser(AbstractUser):
    user_type_data = ((1, "HOD"), (2, "Staff"), (3, "Student"))
    user_type = models.CharField(default=1, choices=user_type_data, max_length=10)

class Staff(models.Model):
    id = models.AutoField(primary_key=True)
    admin = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
    email = models.EmailField()
    objects = models.Manager()


# forms.py
class StaffForm(forms.ModelForm):
    model = Staff
    first_name = forms.CharField(required=True)
    last_name = forms.CharField(required=True)

    class Meta:
        model = Staff
        fields = '__all__'

# views.py
class StaffCreateView(CreateView):
    model = Staff
    form_class = StaffForm
    context_object_name = 'staff'
    success_url = reverse_lazy('staff_list')


# staff_form.html
<form method="post">
    {{ form.as_p }}
    <input type="submit" value="Save">
</form>

Ваша форма указывает fields = '__all__', которая включает Staff.admin поле один-к-одному. Поля StaffForm.first_name и StaffForm.last_name переопределяют поле формы для этих полей модели, но не являются строго причиной присутствия этих полей на форме.

Если вы хотите удалить поле admin из StaffForm, вам следует заменить fields = '__all__' на fields = ['first_name', 'last_name'] или exclude = ['admin'].

Вы можете прочитать больше в документации Django о выборе полей формы модели.

Вернуться на верх