ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

orm 多对多

2021-11-30 23:03:46  阅读:142  来源: 互联网

标签:__ serializers models member orm CharField True


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

 

标签:__,serializers,models,member,orm,CharField,True
来源: https://www.cnblogs.com/bill2014/p/15626829.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有