【问题标题】:How do I get the value of the object being created in Django CreateView for further logic? [duplicate]如何获取在 Django CreateView 中创建的对象的值以获取进一步的逻辑? [复制]
【发布时间】:2021-03-11 23:01:39
【问题描述】:

所以我有一个使用模型表单“A”的 CreateView,我还有一个不同的模型,当模型表单“A”中的这个模型被提交时,我想编辑它。

如何访问未创建的对象?有没有更好的办法?

这里是form_valid函数()

    def form_valid(self, form):
        member = self.object
        form.instance.registration_upto = form.cleaned_data['registration_date'] + delta.relativedelta(
            months=int(form.cleaned_data['subscription_period']))

        if form.cleaned_data['fee_status'] == 'paid':
            payments = Payments(
                user=member,
                payment_date=form.cleaned_data['registration_date'],
                payment_period=form.cleaned_data['subscription_period'],
                payment_amount=form.cleaned_data['amount'])
            payments.save()
        return super().form_valid(form)

Self.object 为 None,因为该对象尚未创建。我想访问该对象,因为它是我的付款模型中的用户。我只需要坚持基于类的视图。有什么办法可以做到吗?

我对 Django 有点陌生,查看文档并没有太大帮助。 感谢您的任何建议

已解决

【问题讨论】:

    标签: django django-views


    【解决方案1】:

    你也可以做 self.object=form.save(commit=False)。它会将对象保存在内存中,但不会将其提交到 db,因此您可以使用该对象执行操作,然后将对象保存到 db

            if form.cleaned_data['fee_status'] == 'paid':
                payments = Payments(
                    user=member,
                    payment_date=form.cleaned_data['registration_date'],
                    payment_period=form.cleaned_data['subscription_period'],
                    payment_amount=form.cleaned_data['amount'])
                # commit false will only save object to memory
                payments.save(commit=False)
    
                #### Do your stuff here #####
    
                # regular save will save it to db
                payments.save()
            return super().form_valid(form)
    

    【讨论】:

    • 不知道这也适用于基于类的视图。谢谢
    猜你喜欢
    • 2012-10-29
    • 2016-10-18
    • 1970-01-01
    • 2018-12-09
    • 2017-05-05
    • 2022-01-19
    • 1970-01-01
    • 2019-05-12
    • 2016-09-18
    相关资源
    最近更新 更多