【发布时间】:2018-06-28 04:44:31
【问题描述】:
我正在努力寻找解决以下困境的文档和示例。我有两张表,Results(包含比赛结果)和 Photos(每张照片都包含该比赛中的跑步者)。两个表都包含 entrant_numbers,即比赛中的参赛者编号和照片中的参赛者编号。在 SQL 中,我像这样加入他们以获得每个跑步者的照片捕获总数。
SELECT * FROM Photo p
INNER JOIN Result r ON p.entrant_number=r.entrant_number AND p.race_year=r.race_year
WHERE r.user_id=123
我的模型的结构是这样的;
class Photo(models.Model):
photo_id = models.AutoField(primary_key=True)
race_id = models.ForeignKey('Race')
url_pre_string = models.CharField("URL pre-string", max_length=255)
filename = models.CharField("Filename", max_length=100)
extension = models.CharField("File extensions", max_length=4)
date_created = models.DateTimeField(auto_now_add=True)
date_updated = models.DateTimeField(auto_now=True)
class Race(models.Model):
race_id = models.AutoField(primary_key=True)
race_year = models.PositiveIntegerField("Race year", null=False, blank=False)
date_created = models.DateTimeField(auto_now_add=True)
date_updated = models.DateTimeField(auto_now=True)
class Result(models.Model):
result_id = models.AutoField(primary_key=True)
race_id = models.ForeignKey('Race')
position = models.PositiveIntegerField("Position", default=0)
entrant_number = models.PositiveIntegerField("Entrant number", default=0, null=True, blank=True)
user_id = models.ForeignKey(User, null=True)
date_created = models.DateTimeField(auto_now_add=True)
date_updated = models.DateTimeField(auto_now=True)
我最近尝试的查询是;
photo_captures = Photo.objects.filter(result__user_id_id=current_user.id)
我希望这会遍历结果并过滤当前用户 ID。
【问题讨论】:
-
据我了解,每个跑者都是
User,他们可以参加多场比赛。在每场比赛中,他们都有一个不同的entrant_number,这是该比赛独有的,您要做的就是从特定比赛中获取用户的所有Photo。对吗? -
实际上我需要所有比赛的所有照片。表格需要通过 entrant_number 和 race_year 链接,以使该用户的照片独一无二,因为用户每年可以有不同的比赛编号(因此有多个连接)。
标签: django orm inner-join