django-autocomplete-light – 如何返回不同的字段然后是模型主键?

我正在使用django-autocomplete-light

在模型的forms我想在其中一个字段上使用自动完成。 该字段不是外键或其他东西,而只是一个整数字段,对于自动完成,我实际上想要使用相同的模型,然后填写表格。

但是,自动完成的查询集会返回ID,我想填写“projektnummer”字段。

任何线索我如何设置自动完成,以便它不返回模型的主键,但返回其他一些字段?

当我在整数字段上使用autocomplete-widget时,似乎我从脆弱的表单中得到了有线故障。

models.py

class KombiPublikation(models.Model): typid = models.ForeignKey('KombiPublikationsTypMedium', verbose_name='Outputtyp', db_column='typid') # publikationstyp.id or publikationstypinfo.typid [...] projektnummer = models.IntegerField(verbose_name='Projektnr.', default=0, blank=True) [...] 

views.py

 class SearchProjectinFormAutocomplete(autocomplete.Select2QuerySetView): def get_queryset(self): qs = KombiPublikation.objects.filter(typid__in=[222, 223, 224]).filter(zeigen=1) if self.q: qs = qs.filter(Q(projektnummer__contains=self.q)) return qs 

forms.py

 class KombiPublikationForm(forms.ModelForm): class Meta: model = KombiPublikation #fields = [] exclude = ['pub_sprache'] widgets = { 'typid': autocomplete.ModelSelect2(url='output:typ-autocomplete', forward=['typtyp']), 'projektnummer': autocomplete.ModelSelect2(url='output:projekt-form-autocomplete'), } 

我找到了答案。

实际上,您必须从基本autocomplete.Select2QuerySetView重写get_result_value,以从结果对象返回所需的变量。 🙂

但是,我仍然无法在我的脆形表单中使用自动完成小部件 – 为此打开了一个新问题( 在向模型表单添加自动完成字段时 ,请参阅’list’对象没有属性’queryset’错误 )

 def get_result_value(self, result): """Return the value of a result.""" return result.pk #change pk to the variable of your choice 

我最好的猜测是你在KombiPublikationForm中的KombiPublikationForm类中进行查询,而不是在models.py中使用KombiPublikationForm进行查询。

 class SearchProjectinFormAutocomplete(autocomplete.Select2QuerySetView): def get_queryset(self): qs = BasePublikation.objects.filter(typid__in=[222, 223, 224]).filter(zeigen=1) if self.q: qs = qs.filter(projektnummer__contains=self.q) return qs 

另一方面,我们可能想看看KombiPublikationsTypMedium类是如何看的,以便了解查询的行为方式。

希望这可以帮助!!

– 编辑 –

尝试摆脱Q语句: qs = qs.filter(projektnummer__contains=self.q)