Hi,
I'm currently learning Django and I've tried the autocomplete-light framework base on Select2.
The problem i'm facing is that I want to Forward input field information to filter another input field.
There is a lot of information about that on the internet and on the autocomplete-light tutorial but, every example that I've seen use the same url address to make there Foward. I was wondering if it was possible to Forward it to another address ?
I can change the url adress but it make my first input field return element of the second.
In the code below, want I want is to filter codePostalResidence base on the selected villeMunicipaliteResidence value.
I want the form to filter base on the link "cmunic = munic_id"
I know that's a lot of information, but if someone can give me a hint about anything it would really help me.
Thanks!
#forms.py
class ODData2018Form(forms.ModelForm):
villeMunicipaliteResidence = forms.ModelChoiceField(label='Ville / Municipalité : ', required=False,
queryset=TbMunicsV01.objects.all(),
widget=autocomplete.ModelSelect2(url='municipalite2001', attrs={'data-placeholder': 'Ville / Municipalité', 'data-html': True, 'style':'width:100%'}, forward=['villeMunicipaliteResidence'])
codePostalResidence = forms.ModelChoiceField(label='Code postal : ', required=False,
queryset=TbCpV01.objects.all(),
widget=autocomplete.ModelSelect2(url='codepostal',
attrs={
'data-placeholder': 'Code postal',
},)
)
)
#views.py
class CodePostal(autocomplete.Select2QuerySetView):
def get_queryset(self):
# Don't forget to filter out results depending on the visitor !
#if not self.request.user.is_authenticated:
# return Choice.objects.none()
qs = TbCpV01.objects.all()
villeMunicipaliteResidence = self.forwarded.get('villeMunicipaliteResidence', None)
print(str(villeMunicipaliteResidence))
if villeMunicipaliteResidence:
qs = qs.filter(cmunic=villeMunicipaliteResidence)
if self.q:
qs = qs.filter(cp__istartswith=self.q)
return qs
class Municipalite2001(autocomplete.Select2QuerySetView):
def get_queryset(self):
# Don't forget to filter out results depending on the visitor !
#if not self.request.user.is_authenticated:
# return TbMun2001HV01.objects.none()
qs = TbMun2001HV01.objects.all()
if self.q:
qs = qs.filter(nom_mun__istartswith=self.q)
return qs
#models.py
class TbCpV01(models.Model):
cp_idu = models.IntegerField(blank=True, null=True)
cp = models.TextField(blank=True, null=True)
pr = models.IntegerField(blank=True, null=True)
prabv = models.TextField(blank=True, null=True)
sdr2016c = models.TextField(blank=True, null=True)
cmunic = models.IntegerField(blank=True, null=True)
drsdr2016c = models.TextField(blank=True, null=True)
inod18mtl4 = models.IntegerField(blank=True, null=True)
inod18mtl = models.IntegerField(blank=True, null=True)
xll83 = models.FloatField(blank=True, null=True)
yll83 = models.FloatField(blank=True, null=True)
xmtm83z8 = models.FloatField(blank=True, null=True)
ymtm83z8 = models.FloatField(blank=True, null=True)
visible = models.IntegerField(blank=True, null=True)
def __str__(self):
return self.cp
class TbMun2001HV01(models.Model):
munic_id = models.IntegerField(blank=True, null=True)
sdr2001h = models.TextField(blank=True, null=True)
drsdr2001h = models.TextField(blank=True, null=True)
nom_mun = models.TextField(blank=True, null=True)
desg_mun_a = models.TextField(blank=True, null=True)
desg_mun = models.TextField(blank=True, null=True)
drsdr2016c = models.TextField(blank=True, null=True)
def __str__(self):
return self.nom_mun