Форма модели 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"))