Форма, возвращающая данные, не является действительной в 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 "