Получение идентификатора категории для элемента из Django url
Это выглядит как нечто простое и обычное, но я не могу найти, что не так в моей реализации.
Я создаю простую форму добавления/редактирования элементов в моем Django проекте для элементов по категориям. Форма будет располагаться по адресу /<category_id>/add. После заполнения данных в форме, она может просто получить категорию из category_id.
Я пытаюсь заполнить эти данные в методе form_valid в FormView, но все, что я получаю, это ошибку:
Ошибка целостности в /1/add NOT NULL constraint failed: megashop_item.category_id
Я пробовал print("boo") в методе form_valid - ничего не выводится, похоже, что валидация бросает исключение. Похоже, что это валидация ItemCreateView, но как это исправить?
Как это исправить? Все примеры связаны с использованием функций, а не представлений.
models.py
class Category(models.Model):
title = models.CharField(max_length=200)
class Item (models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE)
title = models.CharField(max_length=200)
forms.py
class ItemForm(forms.ModelForm):
class Meta:
model = Story
fields = ["title", "category"]
urls.py
urlpatterns = [
path("<int:category_id>/add", ItemCreateView.as_view(), name="item-add"),
]
views.py
class ItemCreateView(LoginRequiredMixin, CreateView):
model = Category
form_class = CategoryForm
class ItemFormView(LoginRequiredMixin, FormView):
template_name = "megashop/item_form.html"
form_class = ItemForm
success_url = reverse_lazy("catalog:index")
def form_valid(self, form):
instance = form.save(commit=False)
instance.contest = Category.objects.get(pk=self.kwargs.get('category_id'))
form.save()
return HttpResponseRedirect(self.get_success_url())