Как в Django получить данные из нескольких foreignkey на определенную дату?

Подскажите, пожалуйста:

Models.py

class Electricitymeter(models.Model):
    name = models.CharField(max_length=100)
    serialnumber = models.CharField(unique=True, max_length=30, primary_key=True, null=False, blank=False,)
    ratio_transform = models.PositiveSmallIntegerField(null=False, blank=False, default=1)

class Lessor(models.Model):
    name = models.CharField(unique=True, max_length=100)

class Rentaroom(models.Model):
    room = models.OneToOneField(Room, on_delete=models.CASCADE)
    renter = models.ForeignKey(Renter, verbose_name="Название арендатора", on_delete=models.CASCADE)
    electricitymeter = models.OneToOneField(Electricitymeter, on_delete=models.CASCADE)
    tarifofelectricity = models.FloatField(blank=False, null=False, default=11.8)

class Electricitydate(models.Model):
    serialnumber = models.ForeignKey(Electricitymeter, blank=True, null=True, on_delete=models.CASCADE)
    datedata = models.DateField(null=False, blank=False)
    consumption = models.PositiveIntegerField(blank=False)
В форме на определенную дату нужно вытащить consumption (показание)

Views.py

def outputmetersdata(request):
    form = MyForm()
    if request.method == 'POST':
        form = MyForm(request.POST)
        if form.is_valid():
            form = form.cleaned_data
            startdataperiod = form['startdataperiod']
            enddataperiod = form['enddataperiod']
            pk = form['lessor']
            obj = Rentaroom.objects.all().filter(lessor_id=pk.id)

            startdate = startdataperiod - timedelta(days=3)
            enddate = startdataperiod + timedelta(days=3)
            startconsumption = Electricitydate.objects.filter(datedata__range=[startdate, enddate])
            context = {
                'obj': obj,
                'startdataperiod': startdataperiod,
                'enddataperiod': enddataperiod,
                'pk': pk,
            }
        return render(request, 'roomsmeters/outputmetersdata.htm', context)
    else:
        form = MyForm()
    return render(request, 'roomsmeters/outputmetersdata.htm', {'form': form})


Template

{% for obj in obj %}
<h1> Показания за период с {{ startdataperiod }} - {{ enddataperiod }} </h1>
    <tr>
        <td>{{ obj.spotelectr }}</td>
        <td>{{ obj.renter }}</td>
        <td>{{ obj.room }}</td>
        <td>{{ obj.electricitymeter }}</td>
        <td>{{ obj.electricitymeter.ratio_transform }}</td>
        <td>{{ obj.electricitymeter.serialnumber }}</td>
        <td>{{ pk }}</td>
</tr>

Вопрос в следующем: Как в шаблоне на определенную дату (startdataperiod) вытащить показание счетчика? Т.е. получается через модель Rentaroom нужно попасть в Electricitymeter, а, оттуда в Electricitydate на определенную дату (желательно, чтобы даже если дата не совпадет, то было бы значение внесенное ранее и действовавшее до следующего внесения показаний)

И где лучше проводить вычисления? нужно разность на начало и на конец период показаний умножить на коэффициент и на тариф
  • Вопрос задан
  • 112 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы