limit_choices_to

本文探讨了在Django框架中如何实现多对多关系的数据模型,具体介绍了'teachers'字段如何关联到'UserInfo'及'部门表',并限制了选择范围,确保了数据的一致性和准确性。
 # 多对多   老师
    teachers = models.ManyToManyField(verbose_name='任课老师', to='UserInfo', related_name="abc", limit_choices_to={'depart__in': [1004, 1005]})

 老师 -> 用户表 -> 部门表

转载于:https://www.cnblogs.com/wt7018/p/11437332.html

@action(detail=False, methods=['get']) def analysis(self, request): """用于时间段内的用时分析""" start_date = request.query_params.get('start_date') end_date = request.query_params.get('end_date') creator_id = request.user.id # 构建基础查询集 queryset = TimeRecord.objects.filter( record_date__range=[start_date, end_date], task__creator_id=creator_id ).select_related( 'task', 'task__task_set', 'task__task_set__domain' ).order_by('record_date') # 处理 domain相关参数,用于筛选 domain_id = request.query_params.get('domain_id') domain_path = request.query_params.get('domain_path') if domain_path: queryset = queryset.filter( task__task_set__domain__tree_path__start_with=domain_path, ) # 聚合分析 - 按日期统计 date_stats = queryset.values( 'record_date' ).annotate( total_time=Sum('duration'), record_count=Count('id') ).order_by('record_date') # 聚合分析 - 按子领域统计,不在子领域内的统一为未归类 date_stats = queryset.values( 'record_date' ).annotate( total_time=Sum('duration'), record_count=Count('id') ).order_by('record_date') return SuccessResponse({'by_date': list(date_stats)}, msg="获取成功") class Domain(AimCoreModel): """领域标签""" name = models.CharField(max_length=50, verbose_name='名称',help_text='名称') parent = models.ForeignKey('self', on_delete=models.SET_NULL, related_name='domain_subs', null=True, blank=True,db_constraint=False, verbose_name='上级') #外键链接自己# limit_choices_to={'parent__isnull': True}, # 新增字段(核心改进) tree_id = models.PositiveIntegerField(db_index=True, verbose_name='用户级树ID') tree_path = models.CharField( max_length=255, # 例如 "1.5.8" 格式 db_index=True, verbose_name='短路径' ) 帮我补充子领域分析的代码
最新发布
08-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值