从连接中检索所有值?

时间:2018-07-14 18:06:16

标签: python django

我有3张桌子。 User, Post, and Share. Post是一个包含所有帖子的表。 PostShare.有一对多关系,Share表是一个表,用于指示用户共享了哪些帖子。这是表格的结构:

class Post(models.Model):
    user        = models.ForeignKey(User, on_delete=models.CASCADE)
    status      = models.CharField(max_length=200)

    share_count = models.IntegerField(default=0)

    created_at  = models.DateTimeField(auto_now_add=True)
    url         = models.CharField(max_length=150)

class Share(models.Model):
    post        = models.ForeignKey(Post, on_delete=models.CASCADE)
    user        = models.ForeignKey(User, on_delete=models.CASCADE)
    shared_at   = models.DateTimeField(auto_now_add=True)

比方说,我们有一个ID为1的用户。我要做的是按日期显示该用户的所有帖子+分享。就像您访问用户的Twitter个人资料时Twitter的行为一样。它显示了所有按日期和时间排序的推文和转发。我尝试做的是此查询:

Share.objects.all().select_related('post').get(user=1)

如果执行此操作,则会收到错误消息,指出该用户有多个共享。我究竟做错了什么? 错误:

  

Example.models.MultipleObjects返回:get()返回多个   分享-返回2!

2 个答案:

答案 0 :(得分:2)

您应将get()替换为filter()

请参阅getfilter的文档

答案 1 :(得分:1)

如果不返回一个或多个对象,则

.get()将返回错误。使用.filter()来获取QuerySet:

Share.objects.all().select_related('post').filter(user=1)