2013-02-14 6 views
1

Вот моя структура моделей.Поиск таблиц в django

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 для этого небольшого поиска.

+0

Сколько полей вы хотите найти? То, как вы это делаете, прекрасно, если вам не нужно каждый раз запрашивать динамический набор полей. –

+0

на основе тега ключевое слово, которое соответствует имени fir_name или подкатегории категории пользователя и тегам – burning

ответ

0

Если вам нужно только выполнить поиск на основе этих трех полей, то вы все прекрасно. Если таблица становится большой, вам, вероятно, следует создать индекс в поисковых полях, пока индекс может использоваться с оператором SQL LIKE.

Если набор потенциальных полей увеличивается, рассмотрите возможность использования чего-то типа django-filter, чтобы сделать фильтрацию с помощью форм.