diff --git a/apps/srm/migrations/0012_auto_20251127_1600.py b/apps/srm/migrations/0012_auto_20251127_1600.py new file mode 100644 index 00000000..1f664b9b --- /dev/null +++ b/apps/srm/migrations/0012_auto_20251127_1600.py @@ -0,0 +1,126 @@ +# Generated by Django 3.2.12 on 2025-11-27 08:00 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('system', '0006_auto_20241213_1249'), + ('srm', '0011_auto_20251125_1637'), + ] + + operations = [ + migrations.RemoveField( + model_name='platstanding', + name='achieve', + ), + migrations.RemoveField( + model_name='platstanding', + name='completion', + ), + migrations.RemoveField( + model_name='platstanding', + name='finished', + ), + migrations.RemoveField( + model_name='platstanding', + name='number', + ), + migrations.RemoveField( + model_name='platstanding', + name='org', + ), + migrations.RemoveField( + model_name='platstanding', + name='p_type', + ), + migrations.RemoveField( + model_name='platstanding', + name='period', + ), + migrations.RemoveField( + model_name='platstanding', + name='plat_amount', + ), + migrations.RemoveField( + model_name='platstanding', + name='son_pro', + ), + migrations.AddField( + model_name='platstanding', + name='acceptance_status', + field=models.TextField(blank=True, null=True, verbose_name='项目验收情况'), + ), + migrations.AddField( + model_name='platstanding', + name='belong_dept', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='platstanding_belong_dept', to='system.dept', verbose_name='所属部门'), + ), + migrations.AddField( + model_name='platstanding', + name='const', + field=models.CharField(blank=True, max_length=100, null=True, verbose_name='建设期'), + ), + migrations.AddField( + model_name='platstanding', + name='mid_term_status', + field=models.TextField(blank=True, null=True, verbose_name='项目中期情况'), + ), + migrations.AddField( + model_name='platstanding', + name='milestone', + field=models.TextField(blank=True, null=True, verbose_name='里程碑节点'), + ), + migrations.AddField( + model_name='platstanding', + name='name', + field=models.CharField(blank=True, max_length=200, null=True, verbose_name='名称'), + ), + migrations.AddField( + model_name='platstanding', + name='project_funding', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=15, null=True, verbose_name='项目资金(财政与自筹)'), + ), + migrations.AddField( + model_name='platstanding', + name='project_members', + field=models.TextField(blank=True, null=True, verbose_name='项目人员'), + ), + migrations.AddField( + model_name='platstanding', + name='project_source', + field=models.CharField(blank=True, max_length=100, null=True, verbose_name='项目来源'), + ), + migrations.AddField( + model_name='platstanding', + name='project_type', + field=models.CharField(blank=True, max_length=100, null=True, verbose_name='项目类型'), + ), + migrations.AddField( + model_name='platstanding', + name='red_head_doc_no', + field=models.CharField(blank=True, max_length=100, null=True, verbose_name='红头发文号/公示页'), + ), + migrations.AddField( + model_name='platstanding', + name='responsible_person', + field=models.CharField(blank=True, max_length=50, null=True, verbose_name='负责人'), + ), + migrations.AddField( + model_name='platstanding', + name='sci_tech_achievements', + field=models.TextField(blank=True, null=True, verbose_name='科技成果'), + ), + migrations.AddField( + model_name='platstanding', + name='support_period', + field=models.CharField(blank=True, max_length=100, null=True, verbose_name='项目支持期'), + ), + migrations.AddField( + model_name='platstanding', + name='undertaking_unit', + field=models.CharField(blank=True, max_length=200, null=True, verbose_name='承担单位'), + ), + ] diff --git a/apps/srm/models.py b/apps/srm/models.py index f1410c88..7126e1b7 100644 --- a/apps/srm/models.py +++ b/apps/srm/models.py @@ -131,54 +131,25 @@ class Platform(CommonADModel): condition = models.TextField("平台基本情况与目标绩效", max_length=200, null=True, blank=True) ticket = models.ForeignKey('wf.ticket', verbose_name='关联工单', on_delete=models.SET_NULL, related_name='plat_ticket', null=True, blank=True, db_constraint=False) - -class Platstanding(CommonADModel): - """TN: 平台台账登记""" - number = models.CharField("发文号", max_length=50, null=True, blank=True) - p_type = models.CharField("平台类型", max_length=50, null=True, blank=True) - org = models.CharField("单位", max_length=100, null=True, blank=True) - period = models.CharField("建设期", max_length=200, null=True, blank=True) - platinfo = models.ForeignKey('Platform', verbose_name="平台信息", on_delete=models.CASCADE, related_name='platstanding',null=True, blank=True) + +class Platstanding(CommonBDModel): + """TN: 项目信息表 + + """ + red_head_doc_no = models.CharField("红头发文号/公示页", max_length=100, null=True, blank=True) + name = models.CharField("名称", max_length=200, null=True, blank=True) + project_type = models.CharField("项目类型", max_length=100, null=True, blank=True) city_p = models.BooleanField("市级平台", default=False) province_p = models.BooleanField("省级平台", default=False) - plat_amount = models.DecimalField(max_digits=10,decimal_places=2, null=True,blank=True,verbose_name="平台资金(元)") - son_pro= models.CharField("子项目", max_length=200, null=True, blank=True) - achieve = models.CharField("成果", max_length=200, null=True, blank=True) - finished = models.CharField("完成情况", max_length=200, null=True, blank=True) - completion = models.CharField("建成绩效完成情况", max_length=200, null=True, blank=True) - - -# class ProjectApproval(CommonBDModel): -# """TN: 立项审批表""" -# project_start_date = models.DateField("立项日期", null=True, blank=True) -# is_self_initiated = models.BooleanField("自立项目", default=False) -# is_city_level = models.BooleanField("市级项目", default=False) -# is_province_level = models.BooleanField("省级项目", default=False) -# construction_period = models.CharField("建设期", max_length=100, null=True, blank=True) -# project_members = models.TextField("项目组员", null=True, blank=True) -# project_budget = models.DecimalField("项目预算(万元)", max_digits=12, decimal_places=2, null=True, blank=True) -# project_description = models.TextField("项目基本情况", null=True, blank=True) -# project_performance = models.TextField("目标绩效", null=True, blank=True) - - -# class ProjectInfo(CommonBDModel): -# """TN: 项目信息表 - -# """ -# serial_number = models.CharField("序号", max_length=50, null=True, blank=True) -# red_head_doc_no = models.CharField("红头发文号/公示页", max_length=100, null=True, blank=True) -# name = models.CharField("名称", max_length=200, null=True, blank=True) -# project_type = models.CharField("项目类型", max_length=100, null=True, blank=True) -# platform = models.CharField("所属平台", max_length=100, null=True, blank=True) -# project_source = models.CharField("项目来源", max_length=100, null=True, blank=True) -# construction_period = models.CharField("建设期", max_length=100, null=True, blank=True) -# project_funding = models.DecimalField("项目资金(财政与自筹)", max_digits=15, decimal_places=2, null=True, blank=True) -# support_period = models.CharField("项目支持期", max_length=100, null=True, blank=True) -# undertaking_unit = models.CharField("承担单位", max_length=200, null=True, blank=True) -# responsible_person = models.CharField("负责人", max_length=50, null=True, blank=True) - -# project_members = models.TextField("项目人员", null=True, blank=True) -# milestone = models.TextField("里程碑节点", null=True, blank=True) -# mid_term_status = models.TextField("项目中期情况", null=True, blank=True) -# acceptance_status = models.TextField("项目验收情况", null=True, blank=True) -# sci_tech_achievements = models.TextField("科技成果", null=True, blank=True) \ No newline at end of file + project_source = models.CharField("项目来源", max_length=100, null=True, blank=True) + const = models.CharField("建设期", max_length=100, null=True, blank=True) + platinfo = models.ForeignKey('Platform', verbose_name="平台信息", on_delete=models.CASCADE, related_name='platstanding',null=True, blank=True) + project_funding = models.DecimalField("项目资金(财政与自筹)", max_digits=15, decimal_places=2, null=True, blank=True) + support_period = models.CharField("项目支持期", max_length=100, null=True, blank=True) + undertaking_unit = models.CharField("承担单位", max_length=200, null=True, blank=True) + responsible_person = models.CharField("负责人", max_length=50, null=True, blank=True) + project_members = models.TextField("项目人员", null=True, blank=True) + milestone = models.TextField("里程碑节点", null=True, blank=True) + mid_term_status = models.TextField("项目中期情况", null=True, blank=True) + acceptance_status = models.TextField("项目验收情况", null=True, blank=True) + sci_tech_achievements = models.TextField("科技成果", null=True, blank=True) \ No newline at end of file diff --git a/apps/srm/serializers.py b/apps/srm/serializers.py index 719adea0..fce8064b 100644 --- a/apps/srm/serializers.py +++ b/apps/srm/serializers.py @@ -61,52 +61,3 @@ class PlatstandingSerializer(CustomModelSerializer): fields = '__all__' read_only_fields = EXCLUDE_FIELDS - -# class ProjectSerializer(serializers.ModelSerializer): -# class Meta: -# model = Project -# fields = ['id', 'name'] - - -# class ProjectMemberSerializer(CustomModelSerializer): -# affiliated_platforms = serializers.PrimaryKeyRelatedField( -# many=True, -# queryset=Platform.objects.all(), -# write_only=True -# ) -# affiliated_platforms_detail = PlatformSerializer( -# source='affiliated_platforms', many=True, read_only=True -# ) - -# affiliated_projects = serializers.PrimaryKeyRelatedField( -# many=True, -# queryset=Project.objects.all(), -# write_only=True -# ) -# affiliated_projects_detail = ProjectSerializer( -# source='affiliated_projects', many=True, read_only=True -# ) -# class Meta: -# model = PatentRecord -# fields = '__all__' - - -# class PaperRecordSerializer(CustomModelSerializer): -# class Meta: -# model = PaperRecord -# fields = '__all__' -# read_only_fields = EXCLUDE_FIELDS - - -# class ProjectApprovalSerializer(CustomModelSerializer): -# class Meta: -# model = ProjectApproval -# fields = '__all__' -# read_only_fields = EXCLUDE_FIELDS - - -# class ProjectInfoSerializer(CustomModelSerializer): -# class Meta: -# model = ProjectInfo -# fields = '__all__' -# read_only_fields = EXCLUDE_FIELDS \ No newline at end of file diff --git a/apps/wf/services.py b/apps/wf/services.py index 2d477457..c0fa60a2 100755 --- a/apps/wf/services.py +++ b/apps/wf/services.py @@ -187,7 +187,13 @@ class WfService(object): dpt_attrs = state.filter_dept.split('.') # 通过反向查询得到可能有多层 expr = ticket for i in dpt_attrs: - expr = getattr(expr, i) + try: + expr = getattr(expr, i) + except AttributeError as e: + if "'RelatedManager' object has no attribute" in str(e): + expr = getattr(expr.first(), i) + else: + raise dpts = Dept.objects.filter(id=expr.id) user_queryset = user_queryset.filter(depts__in=dpts) # if state.filter_policy == 1: