orm 多对多

models

class alarmContact(models.Model):
    '''
    告警用户
    '''
    name = models.CharField('联系人名字', max_length=20, help_text='联系人名字', unique=True)
    phone = models.CharField('手机号码', max_length=11, null=False, help_text='手机号码')
    email = models.EmailField('邮箱', null=False)
    describe = models.CharField('字段描述', max_length=100, null=True, help_text='字段描述')

    def __str__(self):
        return self.name

    class Meta:
        db_table = 'monitoring_alarmContact'
        ordering = ['id']

class alarmContactGroup(models.Model):
    '''
    告警用户组
    '''
    alarmModeSelect = (
        ('U', 'only_userAlarm'),
        ('G', 'only_groupAlarm'),
        ('UG', 'user_groupAlarm')
    )
    id = models.AutoField(primary_key=True)
    groupname = models.CharField('报警联系组', max_length=20, help_text='报警联系组')
    member = models.ManyToManyField(alarmContact)
    dingding = models.CharField('dingding token', max_length=150, null=True, help_text='dingding token')
    alarmMode = models.CharField(max_length=2, choices=alarmModeSelect, default='U')
    describe = models.CharField('字段描述', max_length=100, null=True, help_text='字段描述')

    def __str__(self):
        return self.groupname

    class Meta:
        db_table = 'monitoring_alarmContactGroup'
        ordering = ['id']

serilaizers, 展示和增加分开

class alarmContactSerializer(serializers.ModelSerializer):
    describe = serializers.CharField(allow_null=True, allow_blank=True)

    class Meta:
        model = alarmContact
        fields = "__all__"

class addalarmContactGroupSerializer(serializers.Serializer):
    '''
    告警组新增
    '''
    groupname = serializers.CharField()
    member = serializers.CharField()
    dingding = serializers.CharField()
    alarmMode = serializers.CharField()
    describe = serializers.CharField(allow_blank=True,allow_null=True)

    def validate(self, attrs):
        try:
            alarmContactGroup.objects.filter(groupname__exact=attrs['groupname'])
            raise Exception('alarmContactGroupHasExist')
        except Exception as e:
            pass

        return attrs

    def create(self, validated_data):
        member = validated_data.pop('member')
        member_list = member.split(',')
        alarmContactGroup_obj = alarmContactGroup.objects.create(**validated_data)

        alarm_obj_list = []
        for alarmName in member_list:
            try:
                alarm_obj = alarmContact.objects.filter(name__exact=alarmName).values()[0]['id']
                alarm_obj_list.append(alarm_obj)
            except Exception as e:
                print("木有找到")

        alarmContactGroup_obj.member.add(*ll)
        alarmContactGroup_obj.save()

        return alarmContactGroup_obj

class alarmContactGroupSerializer(serializers.ModelSerializer):
    '''
    告警组展示
    '''
    alarmMode = serializers.CharField(source='get_alarmMode_display')

    class Meta:
        model = alarmContactGroup
        fields = "__all__"

    def to_representation(self, instance):
        res = super(alarmContactGroupSerializer, self).to_representation(instance)
        if bool(res['member']):
            res['member'] = [ alarmContact.objects.get(id=mem).name for mem in res['member'] ]
        return res

 

上一篇:CSS的盒子模型(Box Model)


下一篇:PHP+Ajax+JS省市区三级联动