django orm加入没有foiriegn键

时间:2018-05-11 07:17:27

标签: orm django-queryset django-orm

设置

  • 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'

我希望通过postreply字段过滤postuid表格 并在fitered postreply中通过useruid获取userinfo实例

如果是postinfo ex)

              postuid =3

postreply ex)

              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

userinfo ex)

              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'

如何做到这一点

1 个答案:

答案 0 :(得分:0)

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

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