관리자가 아닌 경우 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는 올바르게 전달되지 않습니다 (없음).
도움말/감사합니다!