Django自动完成轻度筛选外键值



我使用Django AutoComplete Light库根据主键筛选Form值。我有两种型号如下:

class Skill(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name

class SubSkill(models.Model):
name = models.CharField(max_length=50)
skill = models.ForeignKey(Skill, on_delete=models.CASCADE, null=True)
def __str__(self):
return self.name.

但是,这两个字段在另一个Employee模型中使用,因为我想基于该模型进行查询。我使用Django Smart Selects将模型链接到Employee模型中,效果很好。然而,我试图使用自动完成库根据技能过滤我的子技能,但却得到了所有的子技能。我的Django自动完成灯视图看起来像这个

class SubskillsAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
# Don't forget to filter out results depending on the visitor !
# if not self.request.user.is_authenticated():
#     return Country.objects.none()
qs = SubSkill.objects.all()
if self.q:
qs = qs.filter(name__istartswith=self.q)
return qs

我的模型表格是这样的:

class EmployeeSkillForm(forms.ModelForm):
class Meta:
model = Employee
fields = ('skills','sub_skills', 'experience','resume','certificates')
widgets = {
'sub_skills': autocomplete.ModelSelect2Multiple(url='skills-autocomplete')
}

我不明白为什么我的子技能不会根据技能进行过滤,而不是显示所有内容。

使用最新版本的django-autocomplete-light文档。要根据表单中其他字段的值筛选结果,必须使用forward参数。

形式:

class EmployeeSkillForm(forms.ModelForm):
class Meta:
model = Employee
fields = ('skills','sub_skills', 'experience','resume','certificates')
widgets = {
'sub_skills': autocomplete.ModelSelect2Multiple(url='skills-autocomplete', 
forward=['skills'])
}

Django Autocomplete轻视图:

class SubskillsAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
qs = SubSkill.objects.all()
skills = self.forwarded.get('skills', None)
if skills:
qs = qs.filter(skill__in=skills)
if self.q:
qs = qs.filter(name__istartswith=self.q)

return qs

相关内容

  • 没有找到相关文章

最新更新