Форма, возвращающая данные, не является действительной в django

В моем приложении django у меня есть модель User, которая имеет булево поле is_manager.

Модель пользователя в models.py:

class User(AbstractUser):
    name = models.CharField(max_length=15, null=True, blank=True)
    last_name = models.CharField(max_length=15, null=True, blank=True)
    title = models.CharField(max_length=50, null=True, blank=True)
    email = models.EmailField(unique=True)
    bio = models.TextField(null=True, blank=True)
    company = models.ForeignKey(Company, on_delete=models.DO_NOTHING, null=True)
    is_manager = models.BooleanField(default=False)
    can_assign = models.BooleanField(default=False)
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username']

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

Регулярные пользователи должны иметь возможность изменять свою биографию и должность, а менеджеры могут изменять булево can_assign.

У меня есть форма, которая занимается логикой этого в forms.py:

class EditUserForm(ModelForm):
    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user')
        if self.user.is_manager:
            super().__init__(**kwargs)
        else:
            super().__init__(**kwargs)
            del self.fields['can_assign']
    class Meta:
        model = User
        fields = ['title', 'can_assign', 'bio']

views.py:

@login_required
def editUser(request, pk):
    user = User.objects.get(id=pk)
    if request.user.is_manager or request.user == user:
        #POST
        if request.method == 'POST':
            form = EditUserForm(request.POST, instance=user, user=request.user)
            if form.is_valid():
                form.save()
                redirect('user-page', pk)
            else:
                print('nope')
        #GET
        form = EditUserForm(user=request.user, instance=user)
        context = {'user': user, 'form': form}
        return render(request, 'users/user_edit.html', context)
    else:
        return HttpResponse('<h1>Access Denied</h1>')

Шаблон:

{% extends 'main.html' %}

{% block content %}

<form method="POST" action="">
    {% csrf_token %}
    {{form.as_p}}
    <input type="submit" value="Submit">
</form>




{% endblock content %}

по какой-то причине метод form.is_valid() возвращает False. Я понятия не имею, почему. Я пытался использовать метод .errors на форме и на полях формы. Ошибки не отображаются. Спасибо за любую помощь!

" О! Я совсем упустил это из виду. Я думаю, что *args требуется, потому что так вы передаете request.POST. Если бы у вас был явный ключ типа myform(data=request.POST), он бы работал, потому что он был бы в *kwargs ... Так что это в основном не удавалось, потому что это действовало так, как будто вы просто инициировали новую форму, а не отправляли ее - Nealium "

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