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',
            }
Вернуться на верх