【问题标题】:Translating SQL request to django将 SQL 请求转换为 django
【发布时间】:2014-04-24 10:13:29
【问题描述】:

我正在尝试创建一个请求(在 django 中),它将返回一个帖子数组(只有用户的帖子,当前用户正在关注)。 这是我的模型

帖子:

class Post(models.Model):
      title = models.CharField("Headline", max_length=100)
      body = models.TextField(max_length=1000)
      user_id = models.ForeignKey(User)
      thumbnail = models.FileField(upload_to=get_upload_file_name, blank=True)
      timestamp = models.DateTimeField(auto_now_add=True)

关注/关注者:

class FollowUser(models.Model):
      who_id = models.IntegerField()
      whom_id = models.IntegerField()
      timestamp = models.DateTimeField(auto_now_add=True)

用户:

class UserProfile(models.Model):
      user = models.OneToOneField(User, unique=True)
      profile_pic = models.FileField(upload_to=get_upload_file_u_name, default='default.png', blank=True)
      bio = models.TextField(null=True)
      website = models.CharField(blank=True, max_length=100)
      location = models.CharField(blank=True, max_length=100)

      def __unicode__(self):
           return "%s's profile" % self.user

我创建的 SQL 请求:

     SELECT *  FROM POSTS Where user_id IN (select whom_id from FOLLOWERS Where user_id = 1 )

所以,我尝试将这个 sql 代码翻译成类似 django 的格式,但我没能做到。 主要问题是我无法请求数组。

需要帮助! 谢谢

【问题讨论】:

  • 我认为你的 who_id 和 who_id 也应该是 User 模型的外键。这是正确的方法,将使您的查询更容易。

标签: python mysql sql django subquery


【解决方案1】:

试试这个

Post.objects.filter(user_id__in=FollowUser.objects.filter(who_id=1).values_list('whom_id'))

您可以通过 request 参数在 views.py 中使用它

Post.objects.filter(user_id__in=FollowUser.objects.filter(who_id=request.user.id).values_list('whom_id'))

【讨论】:

  • 伙计,非常感谢!我正在寻找“user_id__in”和“values_list”,但我不知道如何实现它们。这正是它。一切正常!
【解决方案2】:

表名由应用名称和模型的小写名称组合而成。尝试使用<appname>_posts

【讨论】:

  • 是的,我知道。但实际上我想要一个看起来像这样的请求: f = FollowUser.objects.all().filter(who_id=request.user.id) p = Posts.objects.all().filter(user_id=f.whom_id) 但这没有'不起作用,因为它返回单个对象,似乎我在这里也有错误
猜你喜欢
  • 2017-11-03
  • 2020-05-22
  • 2014-03-29
  • 1970-01-01
  • 1970-01-01
  • 2019-07-12
  • 2018-11-04
  • 2016-01-12
  • 2021-08-19
相关资源
最近更新 更多