Установка локальных переменных в модели Django

Ответы, кажется, сложны для меня, поэтому я написал это:

#kb-mask-overlay { 
    background-color: rgba(0,0,0,0.8);
    width: 100%;
    height: 100%; 
    z-index: 10000;
    top: 0; 
    left: 0; 
    position: fixed;
    content: "";
}

#kb-mask-overlay > .pop-up {
    width: 800px;
    height: 150px;
    background-color: dimgray;
    margin-top: 30px; 
    margin-left: 30px;
}

span {
  color: white;
}
<div id="kb-mask-overlay">
  <div class="pop-up">
    <span>Content of no opacity children</span>
  </div>
</div>
<div>
 <p>
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin vitae arcu nec velit pharetra consequat a quis sem. Vestibulum rutrum, ligula nec aliquam suscipit, sem justo accumsan mauris, id iaculis mauris arcu a eros. Donec sem urna, posuere id felis eget, pharetra rhoncus felis. Mauris tellus metus, rhoncus et laoreet sed, dictum nec orci. Mauris sagittis et nisl vitae aliquet. Sed vestibulum at orci ut tempor. Ut tristique vel erat sed efficitur. Vivamus vestibulum velit condimentum tristique lacinia. Sed dignissim iaculis mattis. Sed eu ligula felis. Mauris diam augue, rhoncus sed interdum nec, euismod eget urna.

Morbi sem arcu, sollicitudin ut euismod ac, iaculis id dolor. Praesent ultricies eu massa eget varius. Nunc sit amet egestas arcu. Quisque at turpis lobortis nibh semper imperdiet vitae a neque. Proin maximus laoreet luctus. Nulla vel nulla ut elit blandit consequat. Nullam tempus purus vitae luctus fringilla. Nullam sodales vel justo vitae eleifend. Suspendisse et tortor nulla. Ut pharetra, sapien non porttitor pharetra, libero augue dictum purus, dignissim vehicula ligula nulla sed purus. Cras nec dapibus dolor. Donec nulla arcu, pretium ac ipsum vel, accumsan egestas urna. Vestibulum at bibendum tortor, a consequat eros. Nunc interdum at erat nec ultrices. Sed a augue sit amet lacus sodales eleifend ut id metus. Quisque vel luctus arcu. 
 </p>
</div>

kb-mask-overlay это ваше (непрозрачность ) parent, pop-up это ваши (без прозрачности) дети. Все, что находится внизу вашего сайта.

1
задан Willem Van Onsem 16 January 2019 в 11:37
поделиться

1 ответ

Это ожидаемое поведение . Когда вы оцениваете

product.parameters.all()[0]

, это означает, что вы делаете выборку из базы данных. Таким образом, Django получит первый из этих параметров. Так как tol_low и tol_high не являются не постоянными (не хранятся в базе данных), это означает, что это будет откат к атрибуту класса, который равен None.

Расчеты здесь довольно просты, поэтому я предлагаю вам преобразовать их в свойства [Python-doc] :

class MeasurementParameter(models.Model):    
    tolerance = models.FloatField()
    set_value = models.FloatField()

    @property
    def tol_low(self):
        return self.set_value * (100-self.tolerance)/100

    @property
    def tol_high(self):
        return self.set_value * (100+self.tolerance)/100

    def tolerance_band(self):
        return self.tol_high, self.tol_low

Здесь мы таким образом будет оценивать имущество при необходимости. Это более надежно: если вы измените tolerance объекта или set_value, то tol_low и tol_high будут отличаться для этого объекта. Таким образом, нет сложного кода для обновления значения соответствующих обновлений. В calc_all_bands также нет необходимости, поскольку вычисления просто выполняются по запросу.

Обратите внимание, что вы не можете использовать свойства в фильтрах Django ORM и т. Д. В этом случае вы можете закодировать свойство как выражение запроса и аннотировать набор запросов с помощью них.

0
ответ дан Willem Van Onsem 16 January 2019 в 11:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: