Django多表查询去重输出

有l两张表,
其中一个是数据表wordsDateBases:里面包含了所有的数据

class wordsDateBases(BaseModel):
    totleNumber = models.IntegerField(verbose_name='记录编号')
    copies = models.IntegerField(verbose_name='册')
    copiesnumber = models.IntegerField(verbose_name='单册编号')
    word = models.CharField(verbose_name='汉字',  max_length=4)
    pinyin = models.CharField(verbose_name='拼音',  max_length=100)

另一张是测试结果表testRecordDate:用户测试后的数据都是放在这里

class testRecordDate(BaseModel):
    user = models.ForeignKey('User.User', on_delete=models.CASCADE,)
    word = models.ForeignKey('wordsDateBases', on_delete=models.CASCADE,)
    record = models.BooleanField()

现在的需求是用户在测试的时候从wordsDateBases取出来的内容,不能是testRecordDate已经存在的内容

# 获取登录的用户信息
user = request.user.id
# 查询已经测试的数据里面该用户该册的测试情况:<QuerySet [{'word__copies': 2, 'word_id': 307, 'record': True}]>
# 这里通过外键查询到关联的wordsDateBases里面的字段。
test_record_obj = testRecordDate.objects.filter(user=user, word__copies=copies).values(
            'word_id', 'word__totleNumber', 'word__copies', 'word__copiesnumber', 'word__word', 'word__pinyin')
# 获取字库里面符合查询结果的字符集这里也要进行字段截取
word_copies_obj = wordsDateBases.objects.filter(copies=copies).values('id',
                          'totleNumber', 'copies', 'copiesnumber', 'word', 'pinyin')
# 最后用difference函数进行去重
word_obj = word_copies_obj.difference(test_record_obj)
print(word_obj)

目前测试了下,看返回内容的需求情况,可以用value_list 也可像文中使用values,但要保证两边的字段值相等。
参考文档:

https://docs.djangoproject.com/zh-hans/5.1/ref/models/querysets/#difference

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值