I am using django-autocomplete-light
in a form for a model I want to use autocomplete on one of its field. the field is not a foreignkey or something, but just a integer field and for autocomplete I would actually like to use the same model then the form I am filling.
The query set from autocomplete however returns the ID and I want to fill the field "projektnummer".
Any clue how I can setup autocomplete so that it returns not the primary key of the model but some other field?
also it seems that I get a wired failure from crispy forms when I use the autocomplete-widget on the integer field.
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'),
}
I found the answer.
You actually have to override get_result_value from the base autocomplete.Select2QuerySetView to return the variable you want from the resulting object. :)
However, I still cannot use the autocomplete widget in my crispy forms form - opened a new question for that (see 'list' object has no attribute 'queryset' error when adding a autocomplete field to a model-form)
My best guess would be that you're making a query out of the
KombiPublikationForm
class in yourforms.py
instead of making it fromBasePublikation
in yourmodels.py
, tryOn the other hand we might want to look on how does the
KombiPublikationsTypMedium
class look like in order to know how would the query might behave.Hope this helps!!
--edit--
Try getting rid of the Q statement:
qs = qs.filter(projektnummer__contains=self.q)