2016-12-19 5 views
0

관리자가 아닌 경우 django-autocomplete light를 전달할 수 없습니다. 문제는 다음과 같습니다. 2 개의 연결된 선택 상자가 있습니다. 열차 연결 앱인 경우 첫 번째 상자 (출발지)에서시를 선택하면 목적지 만 연결됩니다. 연결이있는 도시가 두 번째 상자에 표시됩니다.django-autocomplete-light : 전달은 관리자에서 정상적으로 작동하지만 템플릿에 사용되면 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 구조는 admin 페이지와 같지만 첫 번째 선택 필드의 전달 된 ID는 올바르게 전달되지 않습니다 (없음).

도움말/감사합니다!

답변

0

괜찮 았어. 내가했던 것처럼 누군가를 구할 수있는 경우에 대비하여 :

템플릿에서 나는 방금 렌더링 한 것입니다. {{ form.as_p }} 폼 태그 안에 있어야합니다! 예 :

<form> 
    {{ form.as_p }} 
</form>