Django CreateView не сохраняет все поля... но UpdateView сохраняет
Я использую Django CBV's, чтобы позволить менеджерам добавлять и обновлять информацию о пользователях на фронт-энде. Когда я создаю нового пользователя, два поля не сохраняются в базе данных; встроенные в Django группы разрешений и поле manytomany, которое определяет, какие ленты новостей может просматривать пользователь. Странно то, что когда я обновляю пользователя с помощью updateview, он сохраняется просто отлично. Никаких ошибок при отправке на createview, и все остальные данные сохраняются нормально.
Я упускаю что-то вопиюще очевидное? Оба шаблона размещены одинаково, оба с enctype="multipart/form-data" method="post" .
Django 4.0.4 / Allauth
Модель:
class CustomUser(AbstractUser):
#auth
id = models.UUIDField(default=uuid.uuid4, unique=True, editable=False, primary_key=True)
username = models.CharField(max_length = 50, blank=True, null=True, unique=True)
email = models.EmailField(gettext_lazy('email address'), unique=True)
#Employment info
department = models.ForeignKey(Department, on_delete=models.SET_NULL, null=True, blank=False)
job_title = models.CharField(max_length = 50, null=True, blank=False)
#Personal Info
profile_picture = ProcessedImageField(
upload_to='profile_images/',
processors=[ResizeToFill(width=1000, height=1000, upscale=True)],
format='JPEG',
options={'quality': 100},
null=True,
blank=True
)
# Newsfeeds
viewable_newsfeeds = models.ManyToManyField(Department, blank=True, related_name='viewable_newsfeeds')
#Permissions
department_head = models.OneToOneField(Department, related_name='department_head', on_delete=models.SET_NULL, unique=True, null=True, blank=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username', 'first_name', 'last_name', 'job_title']
class Meta:
ordering = ['first_name',]
verbose_name = "User"
verbose_name_plural = "Users"
permissions = [
('manager_dashboard', 'Can view the manager dashboard'),
('manager_content', 'Can view manager content within the wiki'),
('content_moderator', 'Can update or delete other users posted content'),
]
def __str__(self):
return self.email
Просмотров:
class CreateUserView(CreateView, LoginRequiredMixin, PermissionRequiredMixin):
model = CustomUser
form_class = CreateCustomUserForm
success_url = reverse_lazy('manage-users')
template_name = 'accounts/create-user.html'
permission_required = 'accounts.add_customuser'
class UpdateUserView(UpdateView, LoginRequiredMixin, PermissionRequiredMixin):
model = CustomUser
form_class = UpdateCustomUserForm
success_url = reverse_lazy('manage-users')
template_name = 'accounts/update-user.html'
permission_required = 'accounts.change_customuser'
Формы:
class CreateCustomUserForm(UserCreationForm):
"""Form used to create a user in the frontend"""
class Meta:
model = CustomUser
widgets = {
'viewable_newsfeeds':CheckboxSelectMultiple(),
'groups':CheckboxSelectMultiple(),
}
fields = (
'email',
'first_name',
'last_name',
'department',
'job_title',
'profile_picture',
'department_head',
'viewable_newsfeeds',
'groups',
'is_active',
)
labels = {
'email': 'Email Address',
'first_name': 'First Name',
'last_name': 'Surname',
'job_title': 'Job Title',
'profile_picture': 'Upload Profile Picture',
'groups': '',
'department_head': 'Assign as Head of Department',
'viewable_newsfeeds': '',
}
help_texts = {
'viewable_newsfeeds': 'Select which newsfeeds the user can view.',
'department_head': 'Assign this user as the head of a department.',
'profile_picture': 'Recommended size: 1000 x 1000. Larger images will be automatically cropped',
}
class UpdateCustomUserForm(UserChangeForm):
"""Form used to update a user in the frontend"""
class Meta:
model = CustomUser
widgets = {
'viewable_newsfeeds':CheckboxSelectMultiple(),
'groups':CheckboxSelectMultiple(),
}
fields = (
'email',
'first_name',
'last_name',
'department',
'job_title',
'profile_picture',
'department_head',
'viewable_newsfeeds',
'groups',
'is_active',
)
labels = {
'email': 'Email Address',
'first_name': 'First Name',
'last_name': 'Surname',
'job_title': 'Job Title',
'profile_picture': 'Change Profile Picture',
'groups': '',
'department_head': 'Assign as Head of Department',
'viewable_newsfeeds': '',
}
help_texts = {
'viewable_newsfeeds': 'Select which newsfeeds the user can view.',
'department_head': 'Assign this user as the head of a department.',
'profile_picture': 'Recommended size: 1000 x 1000. Larger images will be automatically cropped',
}