Как связать данные, вводимые пользователем из одного поля в модели Django, с другим полем в той же модели?

Прошу прощения, если это глупый вопрос или если моя терминология не совсем верна. Я совсем новичок в Django и программировании!

Я хочу создать инструмент котировки для моего сайта, который в основном будет представлять собой форму, заполняемую клиентами, которая будет создавать экземпляр модели "quote", а фактическое значение котировки будет автоматически рассчитываться и храниться как часть экземпляра модели, основываясь на данных, введенных пользователем.

Я просмотрел весь интернет, но мне очень трудно найти простое объяснение того, как поле модели может быть проверено и/или автоматически вычислено и сохранено на основе данных, введенных из предыдущих полей.

Мое первое препятствие находится ниже:

class Quote(models.Model):

total_plots = models.IntegerField(default=1)
total_types = models.IntegerField(default=(total_plots),validators=[MinValueValidator(1),MaxValueValidator(total_plots)])

Итак, что я пытаюсь и не могу сделать, так это изначально установить значение по умолчанию для total_types, равное тому, что пользователь ввел для total_plots. Затем я хочу позволить пользователю изменить значение total_types, но оно не может быть больше того, что он ввел для total_plots, поэтому мне нужно взять значение, которое он ввел для total_plots, и использовать его для ограничения того, что он может ввести для total_types.

Ошибка, которую я получаю, выглядит следующим образом: "TypeError: '<=' not supported between instances of 'IntegerField' and 'int'"

Далее я также захочу, чтобы значение котировки вычислялось автоматически и хранилось как часть экземпляра модели.

Я представляю себе, что эта часть модели будет выглядеть примерно так:

quote_value = total_time * hourly_rate

или

quote_value = self.total_time * self.hourly_rate

# Где общее время также было автоматически рассчитано на основе множества других пользовательских данных, а почасовая ставка будет переменной, которую я могу установить/настроить.

Опять же, мне нужно будет получить много данных из пользовательского ввода и использовать их для вычисления результата, а затем хранить эти результаты как часть экземпляра модели.

Мне кажется, я понимаю, что вы пытаетесь сделать, но я не уверен, что понимаю все детали того, что у вас настроено, поэтому это скорее предложение идеи, чем ответ.

Следует помнить, что модели представляют собой таблицы в базе данных, а не конкретные экземпляры цитат. Я бы поступил следующим образом: задал бы каждое из этих полей очень просто в модели, а затем поместил бы любую логику для автозаполнения или максимумов в само представление. Проверять данные в представлении будет гораздо проще, чем в модели, потому что вы сможете иметь дело с конкретными экземплярами/котировками, а не с абстрактной идеей о том, как гипотетически должна выглядеть котировка.

Также может быть полезно (со стороны моделей) создать несколько моделей, чтобы разбить все на как можно более отдельные части, а затем использовать такие вещи, как внешние ключи и соединения, чтобы объединить эти маленькие части в более полезное целое. Эта идея называется нормализацией базы данных и может быть очень полезной для настройки ваших моделей таким образом, чтобы их было легче использовать.

Кроме того, добро пожаловать в программирование на Django, поздравляю с началом пути! Если что-то в моем ответе было непонятно, дайте мне знать, и я смогу дать больше объяснений.

Вернуться на верх