【问题标题】:Search query on more than one model in Django在 Django 中搜索多个模型
【发布时间】:2018-05-09 18:04:33
【问题描述】:

我有两个模型:

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 这样的搜索引擎

我希望人们以三种不同的方式进行搜索。

  1. 所有城市的一种业务。
  2. 一个城市的所有类型的企业。
  3. 一城一业。

我已经尝试过 itertools 的链,但目前没有结果。

我现在只想做一个简单的搜索,而不是使用外部搜索引擎。

感谢任何人的帮助。

【问题讨论】:

  • 这三种不同的方式会归结为一个查询集吗?
  • 也许,我只是希望结果像 yelp 的那样。

标签: python django search django-queryset


【解决方案1】:

您需要执行以下操作:
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')

这里唯一的问题 - 你需要决定用户将如何选择要运行的查询,我的意思是你将如何定义用户想要搜索的内容。

【讨论】:

  • @skerdilajd hoxha 您可以将其发布在单独的答案中吗?看到不同的方法总是有用的。
  • query = request.GET.get('q') query2 = request.GET.get('q2') 如果查询不是 None 并且 query2 不是 None:businesss = Business.objects.filter ( Q(name__icontains=query) | Q(categories__name__icontains=query) ).filter(city__name__icontains=query2).select_related('city') 形式为:
  • 正如我所见,Stackoverflow 不喜欢回答你自己的问题 :)
  • 现在我在搜索结果的分页时遇到了一些问题 :)
猜你喜欢
  • 2015-09-09
  • 2018-03-23
  • 2021-08-19
  • 2020-11-02
  • 2020-12-14
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
相关资源
最近更新 更多