Получение идентификатора категории для элемента из 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())
Вернуться на верх