使用查询来匹配对象,然后通过外键获取所有关联的对象

问题描述 投票:2回答:3

我正在尝试创建一个工作板,用户可以在其中通过邮政编码搜索工作。我将有关Business的信息分为一个模型,将Job的信息分为另一个模型。 Business具有地址,状态,电话号码字段等,而Job具有有关作业本身的信息。我以这种方式进行设计,因此用户不必在每次发布职位时都重新输入有关实体业务的信息。但是现在当我尝试查询与输入的邮政编码匹配的Job时,我真的必须抓住与该邮政编码匹配的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
3个回答
2
投票

您想像通过Business那样通过[​​C0]模型访问Job

__

更多信息:jobs = Job.objects.filter(business__zip_code=query)


1
投票

您可以将相关职位与:

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

可以使用双下划线(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}))来查看“通过”关系。

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

Business

0
投票

您可以通过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}) FK查询:

© www.soinside.com 2019 - 2024. All rights reserved.