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)