我试图理解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'
对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
此外,请确保在将影片分配给rec1
或rec2
字段时使用Movie
对象实例:
movie = Movie.objects.first()
rec.rec1 = movie
rec.save()
编辑:要在拥有ID时获取模型对象,您可以执行以下操作:
rec.rec1 = Movie.objects.get(id=row['rec1'])
rec.save()