fix :修改提交审批报错 RelatedManager' object has no attribute 'belong_dept

This commit is contained in:
TianyangZhang 2025-12-01 10:08:29 +08:00
parent e98027776c
commit 5be3f6fbe5
4 changed files with 153 additions and 99 deletions

View File

@ -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='承担单位'),
),
]

View File

@ -132,53 +132,24 @@ class Platform(CommonADModel):
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)
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)

View File

@ -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

View File

@ -187,7 +187,13 @@ class WfService(object):
dpt_attrs = state.filter_dept.split('.') # 通过反向查询得到可能有多层
expr = ticket
for i in dpt_attrs:
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: