python - 如何在 django 中进行双重内连接?

标签 python mysql django orm inner-join

我有一个 django 应用程序,必须在候选列表中显示“需要”的国家/地区名称和城市名称。 为了更好地解释这一点,我有下一张图片: enter image description here

所以,流程如下: 首先,有人发布了他们各自国家和城市的“需求”。 城市和乡村的模式不同。

然后,候选人可以提出要约来解决该需求。

我想在列表中查看我发送给需求的所有报价(仅 1 个报价对应 1 个需求),但在我的 html 模板中,我想显示需求所在国家/地区和城市的名称。

这是我的models.py

class requiter (models.Model):
    requiter_name = models.CharField(max_length=200, null=True)

class country (models.Model):
    country_name = models.CharField(max_length=200, null=True)

class city (models.Model):
    city_name = models.CharField(max_length=200, null=True)

class candidate (models.Model):
    full_name=models.CharField(max_length=230, null=True)

class need(models.Model):
    requiter = models.ForeignKey(requiter, on_delete=models.CASCADE, null=True)
    title= models.CharField(max_length=300, null=True)
    description=models.TextField(null=True)
    country=models.ForeignKey(country, on_delete=models.CASCADE, null=True)
    city=models.ForeignKey(city, on_delete=models.CASCADE, null=True)

class offer(models.Model):
    need = models.ForeignKey(need, on_delete=models.CASCADE, null=True)
    candidate = models.ForeignKey(candidate, on_delete=models.CASCADE, null=True)

这是我的views.py

def candidateprofile(request):
    candata = candidate.objects.get(id=request.session['account_id'])
    #HERE IS WHERE I WANT TO TAKE ALL THE OFFERS THAT THE CANDIDATE MADE, AND THE NAME OF THE COUNTRY AND CITY IN THE NEEDS
    myoffers = offer.objects.filter(candidate_id = request.session['account_id'] )
    #??????
    dic.update({'candata': candata, 'jobapplies': jobapplies})
    return render(request, 'my_app/candidateProfile.html', dic)

在 SQL 中,下一个等效项是:

SELECT o.need_id, n.title, r.recruiter_name, c.country_name, y.city_name FROM offer AS o
INNER JOIN need AS n ON o.need_id = n.id
INNER JOIN requiter AS r ON n.recruiter_id = r.id
INNER JOIN country AS c ON n.country_id = c.id
INNER JOIN city AS y ON n.city_id = y.id
WHERE o.candidate_id = sended_parameter

但我不知道如何在 django 中做到这一点。请帮忙!

最佳答案

您不应该用这些术语来思考。您应该考虑如何获得您想要的对象。就您而言,您需要引用候选人报价的 Need 对象。所以:

needs = Need.objects.filter(offer__candidate=request.session['candidate_id'])

现在您可以迭代需求并获取 need.country.country_nameneed.city.city_name;这样效率会很低,因为它会导致每次访问都会进行查询,因此我们可以在查询中添加 select_lated :

needs = needs.select_related('country', 'city')

关于python - 如何在 django 中进行双重内连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48195601/

相关文章:

python - 需要编写Python脚本的一部分来保存数据并将其写入文件

python - 如何在 python 中将 COLORREF 从 GetPixel() 转换为 RGB?

mysql - 环境中的 Ruby on Rails MySQL 套接字

mysql - 如何有效地对基于时间的数据集进行分组以计算组平均值和中位数

c# - 使用 EF 将多个一对多关系添加到一张表

python - Keras MNIST 目标向量自动转换为 one-hot?

python - Wagtail 图像部署后无法加载

django - 在django中将除表单数据之外的数据添加到数据库中

python - 为 Django 的日期输入设置添加一个值

python - 使用 Pandas 进行机器学习数据预处理