【问题标题】:django orm join without foiriegn keydjango orm join 没有外键
【发布时间】:2018-10-21 13:21:27
【问题描述】:

设置

  • Django 2.0.2
  • MariaDB 10.2
  • Windows Server 2012

models.py

class Postreply(models.Model):
    replyuid = models.BigAutoField(db_column='ReplyUID', primary_key=True)
    postuid = models.BigIntegerField(db_column='PostUID')
    useruid = models.BigIntegerField(db_column='UserUID')
    content = models.TextField(db_column='Content')
    registerdate = models.DateTimeField(
        db_column='RegisterDate', default=datetime.datetime.today().strftime("%Y-%m-%dT%H:%M:%S"))

    class Meta:
        managed = False
        db_table = 'postreply'

class Postinfo(models.Model):
    postuid = models.BigAutoField(db_column='PostUID', primary_key=True)
    useruid = models.BigIntegerField(db_column='UserUID')
    content = models.TextField(db_column='Content')
    replycount = models.IntegerField(db_column='ReplyCount', default=0)
    registerdate = models.DateTimeField(
            db_column='RegisterDate', default=datetime.datetime.today().strftime("%Y-%m-%dT%H:%M:%S"))

    class Meta:
        managed = False
        db_table = 'postinfo'

class Userinfo(models.Model):
    useruid = models.BigAutoField(db_column='UserUID', primary_key=True)
    useremail = models.CharField(
        db_column='UserEmail', unique=True, max_length=100)
    userpassword = models.CharField(db_column='UserPassword', max_length=128)
    passwordsalt = models.CharField(db_column='PasswordSalt', max_length=128)
    usersex = models.IntegerField(db_column='UserSex')
    userage = models.IntegerField(db_column='UserAge')
    username = models.CharField(
        db_column='UserName', max_length=100, default=0)

    class Meta:
        managed = False
        db_table = 'userinfo'

我想通过postuid 字段过滤postreply 表以 并通过用户uid在fitered postreply中获取userinfo实例

如果 postinfo ex)

              postuid =3

回复前)

              postuid = 3 useruid =21 replyuid= 1
              postuid = 3 useruid =22 replyuid= 2
              postuid = 3 useruid =21 replyuid= 3
              postuid = 2 useruid =21 replyuid= 4
              postuid = 3 useruid =33 replyuid= 5

用户信息前)

              useruid = 21 username = 'A'
              useruid = 22 username = 'B'
              useruid = 33 username = 'C'

如果把 postuid = 3 我想要这个

postuid = 3 useruid =21 replyuid= 1 username = 'A'
postuid = 3 useruid =22 replyuid= 2 username = 'B'
postuid = 3 useruid =21 replyuid= 3 username = 'A'
postuid = 3 useruid =33 replyuid= 5 username = 'C'

怎么做

【问题讨论】:

    标签: orm django-queryset django-orm


    【解决方案1】:

    通过使用values_list 方法,您可以提取仅包含相关用户ID 的列表,然后使用该列表根据该列表过滤Userinfos,如下所示:

    chosen_id = 3
    user_ids = Postreply.objects.filter(postuid=chosen_id).values_list('useruid')
    users = Userinfo.objects.filter(userid__in=user_ids)
    

    【讨论】:

      猜你喜欢
      • 2013-05-16
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-09
      • 1970-01-01
      • 2014-06-13
      • 2019-10-13
      相关资源
      最近更新 更多