Откуда берется это (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 о выборе полей формы модели.