2016-12-19 5 views
0

Я не могу получить django-autocomplete-light для пересылки значений, когда NOT в admin. Вот проблема: у меня есть 2 связанных блока выбора. Это приложение для подключения поездов, поэтому, когда вы выбираете «Город» из первого поля (вылета), на втором месте должны появляться только пункты назначения - Города, для которых есть соединение.django-autocomplete-light: Forward работает отлично в admin, но возвращает None при использовании в шаблоне

Упрощенные модели:

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') 

А вот мои взгляды:

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() 

Наконец мой 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__') 

Все отлично в админ работает (вУстановка Страница подключения), но мне нужно разоблачить это на передней панели. Представленная структура html выглядит так же, как и на странице администратора, но переадресованный идентификатор первого поля выбора не передается правильно (None).

Любые советы/помощь оценены!

ответ

0

OK - получил. В случае, если я могу спасти кого-либо еще от траты времени, как и я:

В шаблоне я просто рисовал {{ form.as_p }} Он должен быть внутри тега формы! Как в:

<form> 
    {{ form.as_p }} 
</form> 
Смежные вопросы