首页 > 解决方案 > django orm join 没有 foiriegn 键

问题描述

设置

模型.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'

我想postreply按字段过滤表并在经过过滤的postreply 中通过 useruidpostuid获取实例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'

如何做到这一点

标签: ormdjango-querysetdjango-orm

解决方案


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

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

推荐阅读