Ошибка при создании поля типа FloatField в форме Django

Я новобранец. Так что, если вопрос тупой, вы были предупреждены.

Вопрос такой: как правильно сделать форму, которая будет содержать поле для ввода цены (число с двумя знаками после запятой)?

Мой проект - интернет-магазин.

Сейчас делаю страницу для добавления новых записей о товарах в БД. Под словом "запись" подразумеваю сущность с такой информацией (4 поля):

  1. ID (primary_key);
  2. "title";
  3. "description";
  4. "price" (типа django.db.models.FloatField).

В html-коде страницы создал форму:

<form method="post">

    {% csrf_token %}

    {{ form.title }}
    <br>
    {{ form.description }}
    <br>
    {{ form.price }}
    <br>

    <button type="submit" class="btn btn-success">Добавить в базу данных</button>

</form>

Подготовил файл forms.py:

from .models import Product
from django.forms import ModelForm, TextInput, Textarea, FloatField


class ProductForm(ModelForm):
    class Meta:
        model = Product
        fields = ["title", "description", "price"]
        widgets = {
            "title": TextInput(attrs={
                'class': 'form-control',
                'placeholder': 'Как называется?'
            }),
            "description": Textarea(attrs={
                'class': 'form-control',
                'placeholder': 'Добавьте описание.'
            }),
            "price": FloatField()
        }

Но возникает ошибка со строчкой: "price": FloatField()

Вот что уже попробовал:

  • Сначала вообще думал, что могу для FloatField использовать атрибут attrs, как использовал его для TextInput и Textarea. Но поробовал разобраться в документации, понял, что вообще не то делаю;

  • Если оставляю эту строку так "price": FloatField() (с пустыми скобками у класса FloatField), Django выдаёт ошибку: 'FloatField' object has no attribute 'use_required_attribute';

  • Если убираю, поле для ввода цены ("price") начинает с какого-то чёрта отображаться. Но отображается без применения стилей, естественно.

Будет полезно, если объясние детали, поделитесь полезными ресурсами или просто укажете конкретную строку документации (или, если вопрос некорректный, подскажете, почему так).

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