1

这是我的模型结构。

class  Category(models.Model):
    name      = models.CharField(max_length=100)


class SUBCategory(models.Model):
    name      = models.CharField(max_length=100)
    cat       = models.ForeignKey(Category,related_name = 'scat',null = True,blank=True)

class Tags(models.Model):
    name      = models.CharField(max_length=100)

class FullProfile(models.Model):
    user            = models.OneToOneField(User)
    birthday        = models.DateField(null = True,blank=True)
    first_name      = models.CharField(max_length=100,null = True,blank=True)
    middle_name     = models.CharField(max_length=100,null = True,blank=True)
    last_name       = models.CharField(max_length=100,null = True,blank=True)
    token           = models.CharField (max_length=200,null = True,blank=True)
    status          = models.CharField(max_length=100,null = True,blank=True)
    tags            = models.ManyToManyField(Tags,related_name = 'tg',null = True,blank=True)
    category        = models.ForeignKey(Category,related_name = 'cat',null = True,blank=True)
    facebook_url    = models.CharField(max_length=100,null = True,blank=True)
    twitter_url     = models.CharField(max_length=100,null = True,blank=True)
    mobile          = models.CharField(max_length=100,null = True,blank=True)
    landline        = models.CharField(max_length=100,null = True,blank=True)
    country         = models.CharField(max_length=100,choices = COUNTRIES,null=True,blank =True,default='INDIA')
    state           = models.CharField(max_length=100,null = True,blank=True)
    city            = models.CharField(max_length=100,null = True,blank=True)

基本上一个用户可以属于一个类别和子类别。

我正在寻找一种方法来搜索属于特定类别、子类别或标签的用户,

我只是在尝试基本的东西,比如

get_all = FullProfile.objects.filter(
                       Q(category__id__iexact=cat) |
                       Q(user__username__icontains=keyword) |
                       Q(first_name__icontains=keyword)
                        ).distinct()

请告诉我让这个搜索模块有效的更好方法。因为其他人要管理这个应用程序,所以我不想使用 Haystack 进行这个小搜索。

4

1 回答 1

0

如果您只需要根据这 3 个字段进行搜索,那么您做得很好。如果表变大,您可能应该在正在搜索的字段上创建一个索引,只要该索引能够与LIKESQL 语句一起使用。

如果潜在字段集变大,请考虑使用django-filter之类的工具对表单进行过滤。

于 2013-02-14T21:45:21.193 回答