我不能让django-autocomplete-light在非管理员时转发值。问题在于:我有2个链接的选择框。这是一个火车连接应用程序,所以当您从第一个框(出发)选择城市时,只有目的地 - 有连接的城市应出现在第二个。
简化模型:
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结构与管理页面中的结构相同,但第一个选择字段的转发ID未正确传递(无)。
任何提示/帮助表示赞赏!
答案 0 :(得分:0)
好的 - 明白了。如果我可以像其他人一样浪费时间来拯救其他人:
在模板中,我只是渲染{{ form.as_p }}
它应该在表单标签内!如:
<form>
{{ form.as_p }}
</form>