左 连接多列 Django 模型 ORM 外键



我试图理解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 个字段是建议(rec1rec2(,对应于Movie.id。我想加入这些模型,以便能够为每个推荐显示 movie.title 和 movie.genre(对于每个用户,以及他们的用户信息(。

我尝试使用两个外键,但在related_name上出现错误,现在出现此错误:Cannot assign "8": "Recommendation.rec1" must be a "Movie" instance.我认为我不完全理解如何连接这些模型的概念。

在SQL中,我会在rec1 = Movie.idrec2 = Movie.id上使用LEFT JOIN,但我不明白如何在Django ORM中实现这一点。

预期成果

User 1, gender 'F': recommendations 'Lion King', 'Batman'

Movie模型使用ForeignKey

class Recommendation(models.Model):
id = models.IntegerField(primary_key=True)
user = models.OneToOneField(User, on_delete=models.CASCADE)
rec1 = models.ForeignKey(Movie, related_name="recommendations1")
rec2 = models.ForeignKey(Movie, related_name="recommendations2")

然后你可以像这样得到你要找的东西,例如:

rec = Recommendation.objects.first()
rec.user.gender
rec.rec1.title

此外,请确保在将影片分配给rec1rec2字段时使用Movie对象实例:

movie = Movie.objects.first()
rec.rec1 = movie
rec.save()

编辑:要在拥有ID时获取模型对象,您可以执行以下操作:

rec.rec1 = Movie.objects.get(id=row['rec1'])
rec.save()

最新更新