Hi,
I’m trying to pass values from one view to another and to save it to the database later, all this using sessions. I’m doing it with categorie and identifiant. identifiant gets properly saved but categorie doesn’t. I suspect that it comes from a bad handling at models.py level but I can’t figure out what’s wrong.
Here are my views:
class AccueilView(FormView):
model = Consentement
form_class = AccueilForm
template_name = 'form1/accueil.html'
success_url = '/entree/'
def form_valid(self, form):
qcon01_consent = form.cleaned_data['qcon01_consent']
identifiant = str(uuid.uuid4())
self.request.session['identifiant'] = identifiant
consent = Consentement(identifiant=identifiant,
qcon01_consent=qcon01_consent)
consent.save()
return super().form_valid(form)
class EntreeView(FormView):
model = CategorieChoice
form_class = EntreeForm
template_name = 'form1/entree.html'
def form_valid(self, form):
categorie = form.cleaned_data['categorie']
self.request.session['categorie'] = categorie
if categorie and 'sympathisantE' in categorie:
return redirect('sympathisant')
elif categorie and 'ex-adhérentE' in categorie:
return redirect('ancien')
else:
return redirect('adherent')
def adherent_view(request,):
categorie = request.session.get('categorie')
identifiant = request.session.get('identifiant')
success_message = None
repondant = None
if identifiant:
try:
repondant = RepondantOptionnel.objects.get(identifiant=identifiant)
except RepondantOptionnel.DoesNotExist:
pass
if request.method == 'POST':
if 'envoyer' in request.POST:
form = AdherentForm(request.POST)
if form.is_valid():
form.instance.categorie = categorie
form.instance.identifiant = identifiant
form.save()
return redirect('conclusion')
elif 'enregistrer' in request.POST:
form = AdherentOptForm(request.POST, instance=repondant)
form.instance.categorie = categorie
form.instance.identifiant = identifiant
form.save()
success_message = f"Success message!"
messages.success(request, success_message)
return redirect('adherent')
else:
form = AdherentOptForm(instance=repondant)
context = {'form': form, 'success_message': success_message}
return render(request, 'form1/adherent.html', context)
Here’s models.py:
class CategorieChoice(models.Model):
class Categorie(models.TextChoices):
ADHERENT = 'UnE adhérentE ou coopérateurICE d\'EELV', _('UnE adhérentE ou coopérateurICE d\'EELV')
ANCIEN = 'UnE ex-adhérentE ou ex-coopérateurICE d\'EELV', _('UnE ex-adhérentE ou ex-coopérateurICE d\'EELV')
SYMP = 'UnE sympathisantE d\'EELV et/ou du futur mouvement "Les Écologistes"', _('UnE sympathisantE d\'EELV et/ou du futur mouvement "Les Écologistes"')
categorie = models.CharField(
_('Êtes-vous : *'),
choices=Categorie.choices,
blank=False,
default=False
)
class RepondantOptionnel(models.Model):
created_at = models.DateTimeField(
auto_now_add=True
)
updated_at = models.DateTimeField(
auto_now=True
)
identifiant = models.UUIDField(
unique=True,
)
categorie = models.CharField(
max_length=200,
blank=True
)
settings.py:
INSTALLED_APPS = [
# 'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'form1',
'django.forms',
'django_countries',
'django_select2',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
"django.middleware.locale.LocaleMiddleware",
"django.middleware.common.CommonMiddleware",
]