Форма модели Django не подтверждается из-за этой ошибки

я запускаю приложение django и пытаюсь создать экземпляр объекта с помощью формы django, которую пользователь отправляет на стороне frontend html. ошибка, которую я получаю в конце, похоже, связана с атрибутом category

вот как выглядит модель класса в моем models.py

class Listing(models.Model):
    title = models.CharField(max_length=64)
    description = models.TextField()
    image = models.ImageField(blank=True)
    categories = ((1,"Clothing/Footwear"), (2,"Books"), (3,"Electronics"), (4,"Cosmetics"), (5,"Toys"), (6,"Home/Garden"), (7,"Sport/Leisure"))
    category = models.CharField(choices=categories, max_length=2)
    starting_price = models.DecimalField(decimal_places=2, max_digits=10)
    lister = models.ForeignKey(User, on_delete=models.CASCADE, related_name="selling")

вот как выглядит форма класса

class Listing_Form(forms.ModelForm):
    class Meta:
        model = Listing
        fields = "__all__"

вот моя функция views.py

def create(request):
    if request.method == "POST":
        form = Listing_Form(request.POST)
        print(form.errors)
        if form.is_valid():
            print('valid')
            form.save()
            return HttpResponseRedirect(reverse("index"))
        else:
            print('invalid')
    else:
        form = Listing_Form()

когда возникает эта строка в функции views

print(form.errors)

это дает мне следующую ошибку

ul class="errorlist" li category ul class="errorlist" li Выберите правильный вариант. 7 не является одним из доступных вариантов."

ul

Проблема в определении ChoiceField заключается в том, что вы используете неправильный тип (int) для 0-индекса кортежа.

categories = ((1,"Clothing/Footwear"), (2,"Books"), (3,"Electronics"), (4,"Cosmetics"), (5,"Toys"), (6,"Home/Garden"), (7,"Sport/Leisure"))

Как вы можете видеть в этой ссылке, они используют string также для этого индекса. Так что в этой ссылке это выглядит так:

GEEKS_CHOICES =(
    ("1", "One"),
    ("2", "Two"),
    ("3", "Three"),
    ("4", "Four"),
    ("5", "Five"),
)

В вашем случае это должно выглядеть следующим образом:

categories = (("1","Clothing/Footwear"), ("2","Books"), ("3","Electronics"), ("4","Cosmetics"), ("5","Toys"), ("6","Home/Garden"), ("7","Sport/Leisure"))
Вернуться на верх