BooleanField form Checkboxes always empty in Django
I have a Model form that has some checkboxes.
The database has values for these records for all rows.
My form displays with empty checkboxes all the time.
I can submit values via the checkbox and the database updates correctly, but form still shows empty checkboxes.
What am I missing here?
Model definition contains
is_coach = models.BooleanField(default=False, blank=True)
is_parent = models.BooleanField(default=False, blank=True)
is_committee = models.BooleanField(default=False, blank=True)
Form is forms.ModelForm containing
is_committee = forms.BooleanField(required=False)
is_coach = forms.BooleanField(required=False)
is_parent = forms.BooleanField(required=False)
HTML template contains
<form action="{% url 'user_profile_admin' %}" method="post">
{% csrf_token %}{{ form|crispy}}
<button type="submit" class="btn btn-success">Update</button>
<button type="button" onclick="window.location='members';return false;"class="btn btn-danger">Cancel</button>
</form>
Link to screenshot showing checkboxes
Error was in the view due to not handling the initial invalid form when this code was first called. Thanks to @willeM_VanOnsem for pointing out irregularities which allowed me to find the issue and correct.
@login_required(login_url="/login")
def user_profile_admin(request):
if request.method == "POST":
user_id = request.POST.get("user_id")
if user_id != None: # this is when edit button pressed in members.html
user_object = User.objects.get(pk=user_id)
email = request.POST.get("email")
if email != None: # this is when the user admin form is actually submitted
user_object = User.objects.get(email=email)
athletes = user_object.athletes.all() #athletes for the user being updated
form = UserAdminForm(request.POST or None, instance=user_object)
if form.is_valid():
user_object = form.save()
success_message="You have updated profile for user : "+email +" successfully"
messages.success(request, success_message)
return redirect('members')
else:
print(form.errors.as_data()) # here you print errors to terminal
user_id = request.POST.get("user_id")
if user_id != None: # this is when edit button pressed in members.html
user_object = User.objects.get(pk=user_id)
print("user id")
email = request.POST.get("email")
if email != None: # this is when the user admin form is actually submitted
user_object = User.objects.get(email=email)
print("email")
form = UserAdminForm(instance=user_object)
return render(request, 'account/user_profile_admin_form.html', {"form": form, "athletes": athletes})
else:
return render(request, 'members')