Django AutoComplete Light Filter 外键值
Django AutoComplete Light Filter Foreign Key Values
我正在使用 Django AutoComplete Light 库根据主键过滤表单值。我有以下两个模型:
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 Autocomplete light 视图如下所示
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
doc。
要根据表单中其他字段的值过滤结果,您必须使用 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 自动完成光视图:
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
我正在使用 Django AutoComplete Light 库根据主键过滤表单值。我有以下两个模型:
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 Autocomplete light 视图如下所示
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
doc。
要根据表单中其他字段的值过滤结果,您必须使用 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 自动完成光视图:
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