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

标签 django django-models django-queryset

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

模型.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})

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

最佳答案

您希望通过 Job 模型访问 Business,就像使用 __ 一样:

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

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

关于django - 使用查询来匹配对象,然后通过外键获取关联的所有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59921759/

相关文章:

python - django admin 中的自定义查询过滤器

python - Django 查询集按 _set 排序

python - 第二次无法执行 celery 节拍

python - 如何在 Django 中序列化 ImageField?

python - Django - Rosetta : Ignore . mo 文件问题

database - Django-queryset 每个字段获取一个对象=foo

python - FieldError : Invalid field name(s) given in select_related: 'userinfo' . 选择是:用户信息

python - Django 中的可排序表格

Django 检查 2 个模型字段的重复项

python - 对象词在 Django 中自动分配给模型