Поисковый запрос по нескольким моделям в Джанго - PullRequest
0 голосов
/ 09 мая 2018

У меня есть две модели:

class City(models.Model):
    name = models.CharField(max_length=50, verbose_name='Qyteti')
    slug = models.SlugField(unique=True) 

class Business(models.Model):
    name = models.CharField(max_length=120, verbose_name='emri')
    slug = models.SlugField(unique=True)
    city = models.OneToOneField(City, verbose_name='qyteti')
    created = models.DateTimeField(auto_now_add=True, verbose_name='krijuar')
    categories = models.ForeignKey(Category, related_name='businesses', verbose_name='kategoria')
    user = models.ForeignKey(User, related_name='user_businesses', verbose_name='autori')
    geom = gis_models.PointField(u"longitude/latitude", geography=True, blank=True, null=True)

Я хочу создать поиск, например yelp.com enter image description here

Я хочу, чтобы люди искали тремя разными способами.

  1. Один вид бизнеса во всех городах.
  2. Все виды бизнеса в одном городе.
  3. Один вид бизнеса в одном городе.

Я пробовал цепочку из itertools, но пока никаких результатов.

Сейчас я бы хотел выполнить простой поиск, а не с помощью внешних поисковых систем.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 09 мая 2018

Вам необходимо сделать следующее:
1) Изменение в вашей модели:

class Business(models.Model):
    city = models.ForeignKey(City, verbose_name='qyteti', related_name='businesses')

2) Запросы:

1) one_type = Business.objects.filter(name = "some_business_type").select_related('city')
one_type.city.name

2) one_city_all_business = City.objects.filter(name = "London").prefetch_related('businesses')
one_city_all_business.businesses.all() - here u get a list of all businesses for London

3) one_type_one_city = City.objects.filter(name = "London").filter(businesses__name = "some_business_type").prefetch_related('businesses')

Единственная проблема здесь - вам нужно решить, как пользователь будет выбирать, какой запрос запускать, я имею в виду, как вы будете определять, что пользователь хочет искать.

...