2016-11-09 33 views
1

我试图使用Django Ajax的选择打包 我有我的form.py:Django ajax选择包不起作用。我错过了什么?

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) 

但在我的表单中,我没有得到任何自动完成,没有字段创建。 我错过了什么?

+0

我猜那就是你在get_query过滤器似乎使用的是不存在的字段的事实在Tenant类中。如果不是这样,那么当您加载表单并输入一些文本时,一些诊断(例如请求/响应)会有所帮助。 –

+0

你说得对,这个字段名称是错误的。我复制了错误的版本。但这不是问题。 –

+0

现在你的过滤器是完全匹配的...你不想要其他一些可能的选项(并且想要使用contains或startswith)吗? –

回答

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) 
+0

处使用类似__icontains的内容,谢谢您的回答。但这不是问题, –

相关问题