我正在尝试创建一个工作板,用户可以在其中通过邮政编码搜索工作。我将有关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})
感谢您的帮助。另外,这似乎是一个很常见的问题,但我不确定要搜索哪个词来找到答案,所以,如果这是闭合的,则可以为我指出正确的方向,这将是很好的!
您想像通过Business
那样通过[C0]模型访问Job
:
__
更多信息:
jobs = Job.objects.filter(business__zip_code=query)
您可以将相关职位与:
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
您可以通过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查询: