【问题标题】:Where To Override Django CreateView?在哪里覆盖 Django CreateView?
【发布时间】:2019-05-26 22:20:37
【问题描述】:

我在这里打开了一个关于未保存在 Django Createview 中的多字段的先前问题。 Django CreateView With ManyToManyField今天排查了大半,发现这段代码确实有效:

class CreateAuthorView(LoginRequiredMixin,CreateView):

    def form_valid(self, form):
        instance = form.save(commit=False)
        instance.save() 
        instance = form.save()

        if instance.access_level == "Custom":
            obj = NewAuthor.objects.get(secret=instance.name)
            obj.access.add(instance.created_by.id)
            print(instance.created_by.id)
            print(obj.access.all())
            instance = form.save()
            obj.save()
            form.save_m2m()
            instance = form.save()

        return super(CreateAuthorView, self).form_valid(form)

当我发出 print(obj.access.all()) 时,我可以在控制台中看到

    obj.access.add(instance.created_by.id)

代码行实际上完全符合我的要求...它将 created_by.id 添加到我在模型中定义的 access(ManyToManyField) 字段中。但是,当记录实际被剪切时,只有用户在表单中选择的值被添加到访问字段中,而 created_by.id 永远不会进入数据库。

我应该在其他地方覆盖 CreateView 以使 created_by 生效吗?我怀疑我在 form_valid 中的初始更新似乎被覆盖了。实际上我已经证明了这一点,因为我的更新实际上是在我的控制台中,但没有进入数据库。提前感谢您对如何最好地解决问题的任何想法。

【问题讨论】:

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


    【解决方案1】:

    我通过这个 SO question 找到了我的问题的答案。事实证明,您必须在 ModelForm 中覆盖 SAVE 才能保存 M2M 字段。 Save Many-To-Many Field Django Forms 这个很棘手。

    【讨论】:

      猜你喜欢
      • 2013-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-07
      • 1970-01-01
      • 2021-06-27
      • 2018-10-08
      • 2015-06-10
      相关资源
      最近更新 更多