user_equipments_ids = UserEquipment.objects.filter(user=request.user).values('equipment_id').distinct()
这样去重后返回<QuerySet [{‘equipment_id’: 5}, {‘equipment_id’: 4}, {‘equipment_id’: 2}, {‘equipment_id’: 3}]> 无法直接返回前端做展示!
equipment 是要去重的字段 是个外键!
class UserEquipment(models.Model):
'''用户的借用信息这里'''
user = models.ForeignKey(UserProfile, verbose_name='用户')
borrow_time = models.DateTimeField(default=datetime.now, verbose_name='借用日期(时分)')
plan_to_return_time = models.DateTimeField(null=True, blank=True, verbose_name='计划归还日期(时分)')
return_time = models.DateTimeField(null=True, blank=True, verbose_name='归还日期(时分)')
equipment = models.ForeignKey(Equipment, verbose_name='设备')
add_time = models.DateTimeField(default=datetime.now, verbose_name='添加时间')
class Meta:
verbose_name = '用户设备'
verbose_name_plural = verbose_name
def __str__(self):
return self.equipment.name
老师的课程代码个人中心展示的时候应该不需要去重因为
......
......
# 查询用户是否关联了此课程
user_courses = UserCourse.objects.filter(user=request.user, course=course)
if not user_courses:
user_course = UserCourse(user=request.user, course=course)
user_course.save()
用户点击‘开始学习’触发CourseInfoView,在加入UserCourse表之前老师有判断是否已经关联;而我这里不同,用户只要借用一次就记录一次这样可以回头查他的借用记录,而个人中心展示的时候,一个设备你借用多次但是只给你展示一次的就可以了,和老师有点区别。
对同样一个UserEquipment这一个model,上面的是对equipment这个外键做去重,必须自己用 For循环处理后得到对象列表返回给前端做展示,直接返回是不行的。
今天需要对同一个model:UserEquipment的另一个外键字段user做去重,**参考老师说的stackoverflow帖子上的方法,也不行,**仍然需要自己for循环组成一个user_list的列表组合返回给前端做展示,直接返回去重后的结果是不行的!
def get_borrow_users(self):
''' 借用此设备的UserEquipment类的实例组成的QuerySet,未去重'''
user_equipments = self.userequipment_set.all()
return user_equipments
def get_borrow_users_ids_distinct(self):
'''借用此设备的UserProfile类的实例组成的列表,去重了'''
user_ids = self.userequipment_set.values_list('user', flat=True).distinct()
user_list = []
for user_id in user_ids:
user_list += UserProfile.objects.filter(id=user_id)
return user_list
老师到底QuerySet 做去重后是不是无法直接返回给前端做展示?我的去重方法是不是有问题?
登录后可查看更多问答,登录/注册