【问题标题】:Django autocomplete lightDjango 自动完成灯
【发布时间】:2017-06-04 14:04:02
【问题描述】:

模型.py:

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

我如何才能添加到自动完成查询集而不是空的“公司”字段? 你能帮帮我吗?

【问题讨论】:

    标签: django django-models autocomplete django-forms django-views


    【解决方案1】:

    您的公司字段是必需的,所以我认为您不会有空值。无论如何,您可以通过以下方式完成您想做的事情:

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

    基本上,它的作用是从查询集中排除 null'' 值。

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

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

      此外,您可能想要qs = qs.filter(company__istartswith=self.q) 而不是qs = qs.filter(name__istartswith=self.q)(基于forms.py

      所以我认为您的views.py 代码应该是:

      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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-02
        • 2021-08-22
        • 1970-01-01
        • 2021-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多