Je ne peux pas obtenir django-autocomplete-light pour transmettre des valeurs quand PAS dans admin. Voici le problème: J'ai 2 boîtes de sélection liées. C'est pour une application de connexions de train, donc quand vous sélectionnez Ville de la première case (départ), seules les villes de destination pour lesquelles il y a une connexion doivent apparaître sur la seconde.django-autocomplete-light: Transférer fonctionne bien dans admin mais renvoie None lorsqu'il est utilisé dans le modèle
Les modèles simplifiés:
class City(models.Model):
name = models.CharField(max_length=64)
destinations = models.ManyToManyField(
'self',
symmetrical=False,
through='Connection')
class Connection(models.Model):
departure = models.ForeignKey(
City,
on_delete=models.CASCADE,
related_name='departure')
destination = models.ForeignKey(
City,
on_delete=models.CASCADE,
related_name='destination')
Et voici mon point de vue:
class DepartureAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
qs = City.objects.all()
if self.q:
qs = qs.filter(name__istartswith=self.q)
return qs
class DestinationAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
qs = City.objects.all()
departure = self.forwarded.get('departure', None)
if not departure:
return []
else:
qs = qs.filter(id=departure)[0].destinations.all()
if self.q:
qs = qs.filter(name__istartswith=self.q)
return qs
class HomeView(generic.UpdateView):
model = City
form_class = ConnectionForm
template_name = 'intercity/home_template.html'
success_url = reverse_lazy('home_view')
def get_object(self):
return City.objects.first()
Enfin mon forms.py:
class ConnectionForm(forms.ModelForm):
departure = forms.ModelChoiceField(
queryset=City.objects.all(),
widget=autocomplete.ModelSelect2(
url='departure-autocomplete'
)
)
destination = forms.ModelChoiceField(
queryset=City.objects.all(),
widget=autocomplete.ModelSelect2(
url='destination-autocomplete',
forward=['departure', ]
)
)
class Meta:
model = Connection
fields = ('__all__')
Tout fonctionne bien dans l'admin (dans Ajouter Page de connexion), mais j'ai besoin d'exposer cela à l'extrémité avant. La structure html rendue semble la même que dans la page d'administration, mais l'ID transféré du premier champ select n'est pas transmis correctement (None).
Des conseils/aide appréciés!