Как добавить новый 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 при выводе на страницу.