orm 多对多
2021/11/30 23:38:36
本文主要是介绍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
这篇关于orm 多对多的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)