如何在 CreateView 中预填充 django 表单

时间:2021-04-21 21:26:09

标签: django django-models django-views django-forms django-templates

如何在使用我的配置文件模型中的字段创建实例时在 Django 表单中预填充字段。假设我的个人资料模型有 Charfield 住所,并且在注册中我将某个用户的住所命名为“开罗”,我想知道如何填写表格说 PostCreateForm并让用户的住所自动填充开罗并使其不可编辑。这样,如果表单要求提供帖子所有者的帖子正文和住所,则该登录用户将能够仅输入帖子正文详细信息,并且在帖子详细信息视图中,他可以查看其住所附有的帖子他们。 我已经尝试按照文档实施 form = PostForm(initial={"residence": "Cairo"}) 类型的方法,但我仍然弄错了。 我在我的视图和表单定义中尝试过,但似乎我做错了。 我需要关于如何在 CreateView 的获取请求或在 forms.py 模型定义中实现这一点的帮助。 任何帮助将不胜感激。

下面是我的 views.py 代码

class PostCreateView(CreateView):
    template_name = 'posts/post_create.html'
    model = Post
    form_class = PostCreateForm
    initial = {'key': 'value'}

    def get(self, request, *args, **kwargs):
        form = self.form_class(initial=self.initial)
        context = {'form': form}
        return render(request, self.template_name, context)

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)

        if form.is_valid():
            instance = form.save(commit=False)
            instance.profile = request.user.profile
            instance.save()
            return redirect(reverse('posts:all_posts'))
        else:  # return form
            form = PostCreateForm(request.POST)
            return render(request, self.template_name, {'form': form, })

0 个答案:

没有答案