Как добавить новый obj из html в django

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

HTML:

<input type="text" class="form-control" placeholder="Name" id = "category-create-name" name= 
"category_name">
<input type="submit" class="login-button" value="Post">

Модель:

class Category(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=255, blank=True, null=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

Форма:

class CategoryCreateForm(forms.ModelForm):
class Meta:
    model = Category
    fields = ('name',)
    widgets = {
        'category_name': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Name', 'id':'category-create-name'}),
        }

Вид:

class CategoryCreateView(CreateView):
form_class = CategoryCreateForm
template_name = 'product/new_category.html'
success_url = '/dashboard/'

Здесь есть несколько моментов, которые я вижу. Во-первых, в вашей форме. В атрибуте widgets в class Meta, ключи в этом словаре должны быть именем поля, которое находится в вашем атрибуте fields. Другими словами, вам нужно изменить 'category_name' на 'name'. Во-вторых, в вашем шаблоне, который используется для представления. Похоже, что вы вручную определяете отдельное поле ввода, а не то, которое ожидает ваше представление и форма. Вы должны просто определить форму в вашем шаблоне следующим образом:

<form method="POST">
   {% csrf_token %}
   {{ form_as_p }}
   <input type="submit" class="login-button" value="Post">
</form>

В шаблоне {{ form.as_p }} будет взята форма, которую вы дали вашему представлению, и автоматически создаст ее в html при выводе на страницу.

Back to Top