【问题标题】:Django ajax-selects package is not working. What I am missing?Django ajax-selects 包不起作用。我错过了什么?
【发布时间】:2017-03-23 16:31:35
【问题描述】:

我正在尝试使用 Django ajax-selects 包 我有我的 form.py :

from ajax_select.fields import AutoCompleteSelectField, AutoCompleteSelectMultipleField
from ajax_select import make_ajax_field
class LeaseTenantForm(forms.ModelForm):
    class Meta:
        model = LeaseTenant
        exclude = []
    tenant  = make_ajax_field(LeaseTenant,'tenant','tenant',help_text="Search for label by name") 
    #tenant = AutoCompleteSelectField('tenant', required=False, help_text=None)

我有我的lookup.py:

from ajax_select import register, LookupChannel
from client.models import Tenant

@register('tenant')
class TenantLookup(LookupChannel):

    model = Tenant

    def get_query(self, q, request):
        return self.model.objects.filter(last_name=q)

    def format_item_display(self, item):
        return u"<span class='tag'>%s</span>" % item.last_name

我有我的租户 model.py:

class Tenant(CommonInfo):
    version = IntegerVersionField( )

    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField(null=True, blank=True)
    phone = models.CharField(max_length=30)
    language = models.CharField(max_length=1, default='E',
                              choices=LANGUAGE_CHOICES)
    external_address = models.CharField(max_length=90,null=True, blank=True)
    external_zip_code = models.CharField(max_length=50,null=True, blank=True)
    external_city = models.CharField(max_length=60,null=True, blank=True)
    external_state_province = models.CharField(max_length=30,null=True, blank=True)
    external_country = models.CharField(max_length=30,null=True, blank=True)
    status = models.CharField(max_length=1, default='N',
                              choices=TENANT_STATUS_CHOICES,null=True, blank=True)
    def __unicode__(self):
        return u'%s %i %s %s %s %s %s %s' % ("#", self.id,"first_name", self.first_name, "last_name",  self.last_name, "phone", self.phone )

但在我的表单中,我没有获得自动完成功能,也没有创建字段。 我错过了什么?

【问题讨论】:

  • 我猜这是因为您在 get_query 中的过滤器似乎正在使用租户类中不存在的字段。如果不是这样,当您加载表单并输入一些文本时,一些诊断(例如请求/响应)会有所帮助。
  • 你正确的字段名称是错误的。我复制了错误的版本。但这不是问题。
  • 现在您的过滤器完全匹配...您不想要一些其他可能的选项(因此想要使用包含或开头)吗?
  • 问题是当我输入任何值时什么都没有发生并且我没有看到任何错误。
  • 当您正在寻找完全匹配时,这一切都非常合理 - 在您输入完全正确的名称之前,我预计不会有任何结果。

标签: django django-ajax-selects


【解决方案1】:

问题是您使用的是完全匹配查询。自动完成行为是不准确的。你有:

def get_query(self, q, request):
    return self.model.objects.filter(last_name=q)

您可能想要达到以下效果:

def get_query(self, q, request):
    return self.model.objects.filter(last_name__icontains=q)

【讨论】:

    猜你喜欢
    • 2020-09-14
    • 1970-01-01
    • 2020-08-26
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    相关资源
    最近更新 更多