rparty返回admin, dept

This commit is contained in:
曹前明 2022-06-27 16:29:06 +08:00
parent 2b04df341d
commit 97b657f4b4
2 changed files with 22 additions and 8 deletions

View File

@ -37,6 +37,9 @@ class RpartyCreateUpdateSerializer(CustomModelSerializer):
class RpartySerializer(CustomModelSerializer):
admin_username = serializers.CharField(source='admin.username', read_only=True)
belong_dept_name = serializers.CharField(source='belong_dept.name', read_only=True)
class Meta:
model = Rparty
fields = '__all__'
@ -138,9 +141,14 @@ class RpjmemberCreateSerializer(CustomModelSerializer):
with transaction.atomic():
ins = super().create(validated_data)
for x in rcertificates:
rpjc, _ = Rpjcertificate.objects.get_or_create(rpj_member=ins, rcertificate=x,
defaults={'rpj_member': ins, 'rcertificate': x})
for f in Rcertificate._meta.fields:
rpjc = Rpjcertificate.objects.filter(rpj_member=ins, rcertificate=x).first()
if rpjc:
pass
else:
rpjc = Rpjcertificate()
rpjc.rpj_member = ins
rpjc.rcertificate = x
for f in Rpjcertificate._meta.fields:
if f.name not in ['id']:
setattr(rpjc, f.name, getattr(x, f.name, None))
rpjc.save()
@ -162,15 +170,20 @@ class RpjmemberUpdateSerializer(CustomModelSerializer):
raise ParseError('成员非创建状态不可修改')
rcertificates = validated_data.pop('rcertificates')
with transaction.atomic():
instance = super().update(instance, validated_data)
ins = super().update(instance, validated_data)
for x in rcertificates:
rpjc, _ = Rpjcertificate.objects.get_or_create(rpj_member=instance, rcertificate=x,
defaults={'rpj_member': instance, 'rcertificate': x})
for f in Rcertificate._meta.fields:
rpjc = Rpjcertificate.objects.filter(rpj_member=ins, rcertificate=x).first()
if rpjc:
pass
else:
rpjc = Rpjcertificate()
rpjc.rpj_member = ins
rpjc.rcertificate = x
for f in Rpjcertificate._meta.fields:
if f.name not in ['id']:
setattr(rpjc, f.name, getattr(x, f.name, None))
rpjc.save()
return instance
return ins
class RpjmemberSerializer(CustomModelSerializer):

View File

@ -21,6 +21,7 @@ class RpartyViewSet(CustomModelViewSet):
create_serializer_class = RpartyCreateUpdateSerializer
update_serializer_class = RpartyCreateUpdateSerializer
serializer_class = RpartySerializer
select_related_fields = ['admin', 'belong_dept']
@action(methods=['post'], detail=True, perms_map={'post': 'rparty:assgin'}, serializer_class=RpartyAssignSerializer)
@transaction.atomic