Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在django中创建双内部联接?_Python_Mysql_Django_Orm_Inner Join - Fatal编程技术网

Python 如何在django中创建双内部联接?

Python 如何在django中创建双内部联接?,python,mysql,django,orm,inner-join,Python,Mysql,Django,Orm,Inner Join,我有一个django应用程序,必须在候选人名单中显示“需要”的国家名称和城市名称。 为了更好地解释这一点,我有以下图片: 因此,过程如下: 首先,有人在他们各自的国家和城市张贴“需要”。 城市和乡村的模式不同 然后,候选人可以提出解决这一需求的建议 我想在列表中看到我发送给需要的所有优惠(仅1个优惠对应1个需要),但在我的html模板中,我想显示需要的国家和城市的名称 这是我的型号。py class requiter (models.Model): requiter_name = mo

我有一个django应用程序,必须在候选人名单中显示“需要”的国家名称和城市名称。 为了更好地解释这一点,我有以下图片:

因此,过程如下: 首先,有人在他们各自的国家和城市张贴“需要”。 城市和乡村的模式不同

然后,候选人可以提出解决这一需求的建议

我想在列表中看到我发送给需要的所有优惠(仅1个优惠对应1个需要),但在我的html模板中,我想显示需要的国家和城市的名称

这是我的型号。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)
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)
这是我的视图。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)
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中,等价物是next:

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怎么做。请帮忙

你不应该用这些术语来思考。你应该考虑如何得到你想要的东西。在您的情况下,您需要引用候选产品的需求对象。因此:

needs = Need.objects.filter(offer__candidate=request.session['candidate_id'])
现在,您可以遍历需求并获得
need.country.country\u name
need.city.city\u name
;这将是低效的,因为它将导致对每个访问进行查询,因此我们可以向查询中添加
select\u related

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