Linked Questions

Popular Questions

I have two models relevant to this question. Each PowerSource has a maximum current (number of amps) that can flow through it before it becomes dangerous.

I want to allow people to utilize these power sources by scheduling Usage instances.

class PowerSource(models.Model):
    title = models.CharField(max_length=20, unique=True)
    max_amps = models.SmallIntegerField(default=0, help_text='Maximum capacity for this Power Source in amps')

class Usage(models.Model):
    power_source = ForeignKey(PowerSource, on_delete=models.CASCADE)
    start_dt = models.DateTimeField()
    end_dt = models.DateTimeField()
    amps = models.SmallIntegerField(help_text='How much current, in amps, does this usage need?')

It's easy enough to check whether a newly placed Usage instance will put the PowerSource over the max_amps value (just get the sum of amps for each order that overlaps with the new Usage instance), but I need something a bit more complex:

Assuming there are multiple Usage instances with overlapping start/stop periods for a particular PowerSource, how can I efficiently identify all time periods when overall usage is at or above the 'max_amps' value for the PowerSource?

I'm pretty experienced with Django, but I don't even know where to start with something like this. Can this be done in the ORM?

Related Questions