【问题标题】:Using query to match object and then get all objects associated via foreignkey使用查询匹配对象,然后通过外键获取所有关联的对象
【发布时间】:2020-01-26 19:08:50
【问题描述】:

我正在尝试创建一个工作板,用户可以在其中通过邮政编码搜索工作。我将有关Business 的信息分离到一个模型中,将Job 分离到另一个模型中。 Business 有地址、州、电话号码等字段,而Job 有关于工作本身的信息。我是这样设计的,这样用户就不必在每次发布工作时重新输入有关实体业务的信息。但是现在当我尝试查询与输入的邮政编码匹配的Jobs 时,我真的必须获取与该邮政编码匹配的Business 对象,然后获取与它们关联的Job 对象吗?这是我的代码:

models.py

from django.db import models
from django.contrib.auth.models import User

class Business(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    zip_code = models.CharField(max_length = 10)


class Job(models.Model):
    business = models.ForeignKey(Business, on_delete= models.CASCADE)
    # ... 

views.py:

def search_results(request):
    query =request.GET.get('query') 
    jobs = Job.objects.filter(zipcode = query) # tried this before realizing the `zipcode` field was part of the `Business` model and not the `Job` model.
    return render(request, 'job/search_results.html', { 'jobs': jobs})

感谢您的帮助。此外,这似乎是一个可能很常见的问题,但我不确定要搜索什么词才能找到它的答案,所以如果这个问题已关闭,但你可以为我指出正确的方向,那就太好了!

【问题讨论】:

    标签: django django-models django-queryset


    【解决方案1】:

    您想通过Job 模型访问Business,就像使用__

    jobs = Job.objects.filter(business__zip_code=query)
    

    更多信息:https://docs.djangoproject.com/en/3.0/topics/db/queries/#lookups-that-span-relationships

    【讨论】:

      【解决方案2】:

      您可以将相关职位与:

      def search_results(request):
          query =request.GET.get('query') 
          jobs = Job.objects.filter(business__zipcode=query)
          return render(request, 'job/search_results.html', { 'jobs': jobs})

      可以使用双下划线 (__) 来“透视”关系。

      如果您还需要展示Jobs 的相关业务,那么可能值得在Business 模型上执行.select_related(..)

      def search_results(request):
          query =request.GET.get('query') 
          jobs = Job.objects.filter(business__zipcode=query).select_related('business')
          return render(request, 'job/search_results.html', { 'jobs': jobs})

      【讨论】:

        【解决方案3】:

        您可以通过BusinessFK查询:

        Job.objects.filter(business__zip_code=your_code)
        

        阅读更多here

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-04
          • 2021-09-12
          • 2014-01-08
          相关资源
          最近更新 更多