首页 > 解决方案 > 如何将 form_class 数据传递到在 Django 中创建的模型对象中?

问题描述

我想在 Django 中创建文章表单。下面的代码得到 Error FileModel.post" must be a "Article" instance。因为我想创建来自 forgnekey 的多个文件相关文章实例。我提交表单数据时需要传递示例post=form.instances,但我不明白如何传递FileModel.objects.create(post=self.form_class, file=f)?如果有任何帮助,我将不胜感激。

视图.py

class CreateView(CreateView):
    form_class = FileForm
    template_name = 'create.html'
    success_url = '/'
    success_message = "New story has been created successfully"

    def form_valid(self, form):
        form.instance.author = self.request.user
        for f in self.request.FILES.getlist('file'):
            FileModel.objects.create(post=self.form_class, file=f) # Error is here!
        return super().form_valid(form)

标签: pythondjangodjango-modelsdjango-viewsdjango-forms

解决方案


您需要传递表单创建的实例,而不仅仅是表单类。例如:

FileModel.objects.create(post=form.instance, file=f)

更新:由于文章尚未保存,当您尝试将其附加到 FileModel 对象时,它不会让您。

尝试这样的事情:

def form_valid(self, form):
    post = form.save(commit=False)
    post.author = self.request.user
    post.save()
    for f in self.request.FILES.getlist('file'):
        FileModel.objects.create(post=post, file=f)
    return redirect('/')

推荐阅读