UpdateView未使用现有的d填充窗体

2024-06-26 14:09:42 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我设置了UpdateView来发送一个request对象到表单,这样我就可以修改表单中的查询集(基于request.user

我的视图.py公司名称:

class DataSourceUpdateView(UpdateView):
    model = DataSource
    form_class = DataSourceForm
    template_name = 'engine/datasource_update.html'

    def get(self, request, *args, **kwargs):

        obj = DataSource.objects.get(pk=kwargs['pk'])
        self.object = None
        form = DataSourceForm(request)
        return self.render_to_response(
            self.get_context_data(form=form,
                                  object=obj))

    def post(self, request, *args, **kwargs):

        form = DataSourceForm(request, request.POST, request.FILES)

        if form.is_valid:
            return self.form_valid(form)
        else:
            return self.form_invalid(form)  

我的表单.py公司名称:

^{pr2}$

我的问题是,在模板中,表单没有使用现有值填充。我该怎么解决这个问题?在


Tags: pyselfform名称表单getreturnrequest
1条回答
网友
1楼 · 发布于 2024-06-26 14:09:42

使用UpdateView有点棘手。因此,为了初始化表单的数据,您需要在视图中而不是在表单中进行。在

下面是如何在使用UpdateView时执行所做的:

class DataSourceUpdateView(UpdateView):
    model = DataSource
    form_class = DataSourceForm
    template_name = 'engine/datasource_update.html'
    # An empty dict or add an initial data to your form
    initial = {}
    # And don't forget your success URL
    # or use reverse_lazy by URL's name
    # Or better, override get_success_url() method
    # And return your success URL using reverse_lazy
    sucess_url = '/' 

    def get_initial(self):
        """initialize your's form values here"""

        base_initial = super().get_initial()
        # So here you're initiazing you're form's data
        base_initial['dataset_request'] = DatasetRequest.objects.filter(
            creator=self.request.user
        )
        return base_initial

        #... The rest of your view logic

你的形式将是:

^{pr2}$

奖金:

为了理解为什么需要初始化表单的数据,您需要查看“UpdateView的MRO,它是Visit this documentation link

  • 。。。在
  • 通用视图.django.编辑.FormMixin#=>;这一个正在处理表单
  • 。。。在

并且FormMixin具有以下属性和方法visit the documentation link,它们是:

  • 初始:包含表单初始数据的字典。 ... 在
  • get_initial():检索表单的初始数据。默认情况下,返回initial的副本。在

另外,我建议您看看FormMixin有什么类似的属性和方法,以便了解如何覆盖它们或让Django为您做魔术:D

相关问题 更多 >