Django form_valid 错误。谁能找到错误?

Django form_valid error. Can anyone find the error?

我正在尝试在 CreateView

上使用 URL 中的值

我的模型是这样的:类别 > 系列

我做了一个 URL path('nova-serie/<categoria>', NovaSerie.as_view(), name='nova_serie'),

URL创建一个新的Serie是这样的:/nova-serie/3

我正在尝试使用 form_valid,但我收到了这条消息:

无法分配“'3'”:“Serie.categoria”必须是“Categoria”实例。

views.py

class NovaSerie(CreateView):
    model = Serie
    form_class = SerieForm
    template_name = 'nova_serie.html'
    success_url = reverse_lazy('home')

    def form_valid(self, form):
        url = self.request.path_info
        parte_final_url = url.replace('/nova-serie/', '')
        form.instance.categoria = parte_final_url
        return super(NovaSerie).form_valid(form) 

forms.py

class SerieForm(forms.ModelForm):
    class Meta:
        model = Serie
        fields = (
            'serie',

        )
        widgets = {
            'title': forms.TextInput(),  # attrs={class="title"}
        }

这里有人可以帮我吗?

路径不需要做字符串处理。您可以使用 self.kwargs 获取 URL 参数。此外,如果要指定 .categoriaid,则应设置 .categoria_id:

class NovaSerie(CreateView):
    model = Serie
    form_class = SerieForm
    template_name = 'nova_serie.html'
    success_url = reverse_lazy('home')

    def form_valid(self, form):
        form.instance<b>.categoria_id = self.kwargs['categoria']</b>
        return super().form_valid(form)

我还建议将 categoria URL 参数指定为 int:

path('nova-serie/<<b>int:</b>categoria>', NovaSerie.as_view(), name='nova_serie'),

这样,如果值不是整数,则不会触发视图。