搜索多个领域的干草堆

时间:2012-05-14 15:09:56

标签: django django-haystack whoosh

我目前正在django中构建一个页面,其中有4个表单字段,2个文本,2个选择字段,提交时它会获取这些字段并搜索几个模型以查找匹配项目。

模型看起来像这样:

class Person(models.Model):
    user = models.ForeignKey(User, blank=True, null=True, verbose_name="the user associated with this profile")
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)
    about = models.TextField(max_length=255, blank=True, null=True)
    birthdate = models.DateField(blank=True, null=True, verbose_name="Birthdate (yyyy-mm-dd)")
    GENDER_CHOICES = (
        (u'M', u'Male'),
        (u'F', u'Female'),
    )
    gender = models.CharField(max_length=1, choices = GENDER_CHOICES, default = 'M')
    picture = models.ImageField(upload_to='profile', blank=True, null=True)
    nationality = CountryField(blank=True, null=True)
    location = models.CharField(max_length=255, blank=True, null=True)
    command_cert = models.BooleanField(verbose_name="COMMAND certification")
    experience = models.ManyToManyField('userProfile.MartialArt', blank=True, null=True)

我正在尝试搜索first_name字段,last_name字段,国籍字段和体验字段,但是如果first_name字段为空,我需要传递一个空值,以便返回所有行,然后过滤从那里与姓氏相同的方式,由于某种原因,它根本不适合我。这是我的平方:

results = SearchQuerySet().models(Person).filter(first_name=sname, last_name=slastname, nationality=scountry, experience__pk=sexperience)

任何想法?

1 个答案:

答案 0 :(得分:0)

在没有看到特定错误或堆栈跟踪的情况下,很难确定哪些“根本不起作用”。

编辑:查看您提供的视图代码,我将删除过滤器并返回您的Fighter,Referee,Insider和Judge模型的所有对象。这是为了确保此处的问题在于过滤器,而不是其他内容。

然后,一旦我确认对象被放入结果中,我会一次放入一个过滤器来确定有问题的过滤器是什么。试一试,然后回复您的结果。