Django的自动完成光

问题描述:

model.py:Django的自动完成光

class Reservation(models.Model): 
    company = models.ForeignKey(GuestContact, on_delete=models.PROTECT) 

class GuestContact(models.Model): 
    company = models.CharField(max_lenght=30) 
    last_name = models.CharField(max_lenght=30) 
    first_name = models.CharField(max_lenght=30) 

form.py.

class ReservationForm(ModelForm): 

    class Meta: 
     model = Reservation 
     fields = '__all__' 
     widgets = { 
      'company': autocomplete.ModelSelect2() 
    } 

views.py

class GuestContactAutocomplete(autocomplete.Select2QuerySetView): 
    def get_queryset(self): 

     qs = GuestContact.objects.all() 

     if self.q: 
      qs = qs.filter(name__istartswith=self.q) 

     return qs 

我如何添加自动完成查询集只非空 “公司” 字段? 你能帮我吗?

您的公司领域是必需的,所以我不认为你会有空值。不管怎么说,你可以完成你想要通过这个做什么:

GuestContact.objects.exclude(company__isnull=True).exclude(company__exact='')

基本上,它是从querset排除null''值。

希望它有帮助。

尝试return qs.exclude(company='').exclude(company__isnull=True)而不是return qs

class GuestContactAutocomplete(autocomplete.Select2QuerySetView): 
    def get_queryset(self): 

     qs = GuestContact.objects.all() 

     if self.q: 
      qs = qs.filter(company__istartswith=self.q) 

     return qs.exclude(company='').exclude(company__isnull=True) 

更重要的是,你(基于forms.py

所以我认为你views.py代码应该是可能想qs = qs.filter(company__istartswith=self.q)代替qs = qs.filter(name__istartswith=self.q)