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

tec*_*mix 4 django jquery jquery-select2 django-crispy-forms django-autocomplete-light

我正在使用 django-autocomplete-light

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

然而,从自动完成设置的查询返回 ID,我想填充字段“projektnummer”。

有什么线索可以设置自动完成功能,使其不返回模型的主键,而是返回其他一些字段?

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

模型.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)
[...]
Run Code Online (Sandbox Code Playgroud)

视图.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
Run Code Online (Sandbox Code Playgroud)

表格.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'),
        }
Run Code Online (Sandbox Code Playgroud)

tec*_*mix 5

我找到了答案。

您实际上必须从基础 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
Run Code Online (Sandbox Code Playgroud)