django-autocomplete-light - 如何 return 一个不同的字段然后是模型主键?

django-autocomplete-light - how to return a different field then a models primary key?

我正在使用 django-autocomplete-light

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

来自自动完成的查询集但是 returns ID,我想填写字段 "projektnummer"。

知道如何设置自动完成,使其 returns 不是模型的主键而是其他字段吗?

另外,当我在整数字段上使用自动完成小部件时,我似乎从 crispy 表单中遇到了有线故障。

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'),
        }

我最好的猜测是,您是从 forms.py 中的 KombiPublikationForm class 进行查询,而不是从 BasePublikation 中进行查询 models.py, 尝试

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 class 的外观,以便了解查询的行为方式。

希望对您有所帮助!!

--编辑--

尝试删除 Q 语句:qs = qs.filter(projektnummer__contains=self.q)

我找到了答案。

您实际上必须将 get_result_value 从基础 autocomplete.Select2QuerySetView 覆盖到 return 您想要从结果对象中获得的变量。 :)

但是,我仍然无法在我的 crispy forms 表单中使用自动完成小部件 - 为此打开了一个新问题(参见 'list' object has no attribute 'queryset' error when adding a autocomplete field to a model-form

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