From 97b657f4b4a45b31754e726c3eaca9ea00c3ea77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E5=89=8D=E6=98=8E?= <909355014@qq.com> Date: Mon, 27 Jun 2022 16:29:06 +0800 Subject: [PATCH] =?UTF-8?q?rparty=E8=BF=94=E5=9B=9Eadmin,=20dept?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/rpm/serializers.py | 29 +++++++++++++++++++++-------- apps/rpm/views.py | 1 + 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/apps/rpm/serializers.py b/apps/rpm/serializers.py index cc64e66a..83bba77e 100644 --- a/apps/rpm/serializers.py +++ b/apps/rpm/serializers.py @@ -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): diff --git a/apps/rpm/views.py b/apps/rpm/views.py index e1efcdd5..279952d3 100644 --- a/apps/rpm/views.py +++ b/apps/rpm/views.py @@ -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