django反向查找外键不起作用

rat*_*123 2 python django foreign-keys

我想获取一个特定的Video对象,然后Rating使用 ForeignKey 反向查找找到与其关联的所有对象,如文档中所述。

我有模型:

class Video(models.Model):
 ...
    rating_int = models.IntegerField(default=1, choices=CHOICES, name='rating_int')
    def __str__(self):
        return self.title


class Rating(models.Model):
    video = models.ForeignKey('Video', related_name='video', null=True)
Run Code Online (Sandbox Code Playgroud)

和意见:

def video_ratings(request):
    vid_rate = Video.objects.get(pk=1)
    ratings_of_video = vid_rate.rating_set.all()
    context = {
        'vid_rate': vid_rate, 'ratings_video': ratings_of_video
    }
    return HttpResponse(template.render(context, request))
Run Code Online (Sandbox Code Playgroud)

当我尝试运行此程序时出现错误 'Video' object has no attribute 'rating_set'

但是当我阅读 django 文档时,它告诉我当你进行反向查找时你需要使用这个_set.all()命令。我不确定这里缺少什么。

Bip*_*ain 5

您已在外键循环中指定了 related_name。所以 rating_set 现在不应该工作。

你可以查找像

ratings_of_video = vid_rate.video.all()
Run Code Online (Sandbox Code Playgroud)

更好的命名约定是ratings在您的 related_name 中使用

class Rating(models.Model):
    video = models.ForeignKey('Video', related_name='ratings', null=True)
Run Code Online (Sandbox Code Playgroud)

然后像这样查询

ratings_of_video = vid_rate.ratings.all()
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你,这解决了我的问题,我被困在这个问题上太久了 (2认同)