def post(self, request, *args, **kwargs): if "name" in request.data: if self.queryset.filter(name=request.data["name"]).exists(): content = {'ERROR': 'name already in use'} return Response(content, status=status.HTTP_409_CONFLICT) hostdata = request.data.copy() if 'ipaddress' in hostdata: ipkey = hostdata['ipaddress'] del hostdata['ipaddress'] host = Host() hostserializer = HostSerializer(host, data=hostdata) if hostserializer.is_valid(raise_exception=True): with transaction.atomic(): hostserializer.save() ipdata = {'host': host.pk, 'ipaddress': ipkey} ip = Ipaddress() ipserializer = IpaddressSerializer(ip, data=ipdata) if ipserializer.is_valid(raise_exception=True): ipserializer.save() location = '/hosts/%s' % host.name return Response(status=status.HTTP_201_CREATED, headers={'Location': location}) else: host = Host() hostserializer = HostSerializer(host, data=hostdata) if hostserializer.is_valid(raise_exception=True): hostserializer.save() location = '/hosts/%s' % host.name return Response(status=status.HTTP_201_CREATED, headers={'Location': location})
def save_host_history_on_save(sender, instance, created, **kwargs): """Receives post_save signal for models that have a ForeignKey to Hosts and updates the host history log.""" hostdata = HostSerializer(Host.objects.get(pk=instance.host_id)).data # Cleaning up data from related tables hostdata['ipaddresses'] = [ record['ipaddress'] for record in hostdata['ipaddresses'] ] hostdata['txts'] = [record['txt'] for record in hostdata['txts']] hostdata['cnames'] = [record['name'] for record in hostdata['cnames']] hostdata['ptr_overrides'] = [ record['ipaddress'] for record in hostdata['ptr_overrides'] ] new_log_entry = ModelChangeLog(table_name='host', table_row=hostdata['id'], data=hostdata, action='saved', timestamp=timezone.now()) new_log_entry.save()
def _get_hostname_and_ips(self, hostobject): ips = [] host = HostSerializer(hostobject) for i in host.data['ipaddresses']: ips.append(i['ipaddress']) return host.data['name'], ips