【发布时间】:2025-12-26 07:55:08
【问题描述】:
我正在尝试了解 Django ORM。
我正在尝试加入 3 个模型。
class User(models.Model):
id = models.IntegerField(primary_key=True)
gender = models.CharField(max_length=25)
class Movie(models.Model):
id = models.IntegerField(primary_key=True)
title = models.CharField(max_length=300)
genre = models.CharField(max_length=300)
class Recommendation(models.Model):
id = models.IntegerField(primary_key=True)
user = models.OneToOneField(User, on_delete=models.CASCADE)
rec1 = models.ForeignKey(Movie, related_name='rec1',
on_delete=models.CASCADE)
rec2 = models.ForeignKey(Movie, related_name='rec2',
on_delete=models.CASCADE)
现在在我的 Recommendation 中,我有 2 个字段是建议(rec1 和 rec2)并对应于 Movie.id。我想加入这些模型,以便能够为每个推荐显示 movie.title 和 movie.genre(对于每个用户,以及他们的用户信息)。
我尝试使用两个外键,但在 related_name 上出现错误,现在出现此错误:Cannot assign "8": "Recommendation.rec1" must be a "Movie" instance. 我认为我不完全理解如何加入这些模型的概念。
在 SQL 中,我会在 rec1 = Movie.id 和 rec2 = Movie.id 上使用 LEFT JOIN,但我不明白如何在 Django ORM 中实现这一点。
预期结果
User 1, gender 'F': recommendations 'Lion King', 'Batman'
【问题讨论】:
-
那么
rec1和rec2不应该是ForeignKeys 吗?通过使用ForeignKey,Django 可以对此进行方便的查询。 -
是的,我试过了。遇到错误:
Cannot assign "8": "Recommendation.rec1" must be a "Movie" instance.,不明白如何规避此问题 -
正如错误所说,通过使用
ForeignKey,您将实例对象设置为这些字段,或者您使用rec1_id设置该实例的主键。
标签: django orm foreign-keys left-join