Создание простого расчета Python для отображения в панели администратора на определенной записи объекта - PullRequest
0 голосов
/ 27 июня 2019

Я довольно новичок в python и работаю над новым проектом django и хочу отобразить расчеты в административной панели для определенных записей, используя данные записей.Это также будет воспроизведено в пользовательском интерфейсе (который еще не создан).

Я изучил основы хранения и управления переменными для других вычислений, выполненных из базового пользовательского ввода.Это немного отличается от того, как это делается в панели администратора.Я использую PyCharm, но PyCharm говорит мне, что есть ошибки.Я также использовал ссылку здесь, чтобы посмотреть, смогу ли я заставить это работать:

https://www.reddit.com/r/django/comments/6xigr3/how_to_show_calculated_field_in_django_admin/

Я понимаю, что приведенный ниже код неверен, но я также не уверен, ссылаюсь ли яправильные переменные для доступа к ним из основной функции?

Как меняется определение этой функции при использовании в панели администратора и пользовательском интерфейсе?

Спасибо за любую помощь по любым вопросамвыше!

# Create a class to calculate the volume by first converting inches to ft, then to cubic yd
class Volume(models.Model):
    linear_ft = models.DecimalField('Length in feet: ', max_digits=200, decimal_places=2)
    depth_in = models.DecimalField('Depth in inches: ', max_digits=200, decimal_places=2)
    width_in = models.DecimalField('Width in inches: ', max_digits=200, decimal_places=2)

    # Convert inches to feet, store variables for use in future functions
    def in_to_ft(self):
        depth_ft = self.depth_in * 12
        width_ft = self.width_in * 12

    # Call to get cubic yards which uses variables from previous functions
    def get_cu_yd(self):
        dims = str(self.linear_ft) + " length x " + str(self.depth_ft) + " depth x " + str(self.width_ft) + " width")
        cubic_ft = self.linear_ft * self.depth_ft * self.width_ft
        cubic_yd = cubic_ft * 0.037037

        return cubic_yd + "cubic yards: " + str(self.dims)

    # Register the function to the property method
    obj_cu_yd = property(get_cu_yd)

def __str__(self):
    return obj_cu_yd

Я хотел бы взять пользовательский ввод (может быть десятичным числом), преобразовать дюймы в футы, вычислить кубические футы, умножив длину (футы) х ширину (футы) х глубину(футы) и сохраните «строковую» версию для отображения размеров объекта. str (self) должен вернуть кубические ярды и строку, описывающую размеры объекта.

:: UPDATE :: Я получил это далеко:

# Create a class to calculate the volume by first converting inches to ft, then to cubic yd

Класс Volume (models.Model): name = models.CharField (max_length = 200) linear_ft = models.DecimalField ('Длина в футах:', max_digits = 200, decimal_places = 2, по умолчанию = 0) Глубина_in = models.DecimalField ('Глубина в дюймах: ', max_digits = 200, decimal_places = 2, по умолчанию = 0) width_in = models.DecimalField (' Ширина в дюймах: ', max_digits = 200, decimal_places = 2, по умолчанию = 0)

# Create empty variables so not to divide/multiply by nonzero
cubic_ft = 0
cubic_yd = 0

# Set conversion rate from ft to yards
cubic_ft_yd = 0.037037

# Call to get cubic yards
def get_cu_yd(self):
    depth_ft = decimal.Decimal(self.depth_in) * 12
    width_ft = decimal.Decimal(self.width_in) * 12
    dims = str(self.linear_ft) + " length x " + str(depth_ft) + " depth x " + str(width_ft) + " width"
    cubic_ft = decimal.Decimal(self.linear_ft)*depth_ft*width_ft
    cubic_yd = cubic_ft*self.cubic_ft_yd

    return str(self.name) + " - " + str(cubic_yd) + "cubic yards: " + dims

# Register the function to the property method
obj_cu_yd = property(get_cu_yd)

def str (self): return obj_cu_yd

Теперь моя проблема заключается в этой ошибке: неподдерживаемые типы операндов для : 'decimal.Decimal' и 'float' inссылка на cubic_yd = cubic_ft self.cubic_ft_yd

Заранее спасибо

1 Ответ

1 голос
/ 27 июня 2019

Вы не должны устанавливать depth_ft и width_ft таким образом.Вместо этого вам нужно установить self.depth_ft = self.depth_in * 12, чтобы переменная действительно была зарегистрирована как член экземпляра.

На самом деле, вам вообще не нужно иметь эту вспомогательную функцию.

def get_cu_yd(self):
        depth_ft = self.depth_in * 12
        width_ft = self.width_in * 12
        dims = str(self.linear_ft) + " length x " + str(depth_ft) + " depth x " + str(width_ft) + " width")
        cubic_ft = self.linear_ft * depth_ft * width_ft
        cubic_yd = cubic_ft * 0.037037

        return dims + "cubic yards: " + str(self.dims)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...