【问题标题】:How to capture many to many field values via get_initial command如何通过 get_initial 命令捕获多对多字段值
【发布时间】:2018-04-21 00:16:34
【问题描述】:

我的 django 之旅进展缓慢,但这一次让我很困惑。我正在尝试通过使用 get_initial 覆盖的复制命令来填充具有不同模型的 CreateView。除了 ManytoMany 字段外,所有属性都按照我的预期复制。我今天大部分时间都在研究这个主题,并发现以下内容与我试图找出的内容非常接近KeyError: 'manager' in django get_initial

我的观点...

class BookView(LoginRequiredMixin,CreateView):
    model = Book 
    template_name = 'book/titles.html'
    form_class = BookForm

def get_initial(self):
    initial = super(BookView, self).get_initial()
    author = author.objects.get(pk=self.kwargs["pk"])
    initial = author.__dict__.copy()
    initial.update({              
            "author": author.name,
       }}  

    for field in self.form_class.base_fields.items():
        value = getattr(self.get_object(), field)
        if field == 'author':
            value = self.get_object().author.all()
        initial.update({field: value})
    return initial

我根据我在 SO 上发现的问题合并了建议的更改,但我仍然得到一个“经理”KeyError。我最终试图在我的模型中填充 manytomanyfield,然后保存值,但无济于事. 任何建议都值得赞赏!

【问题讨论】:

    标签: python-3.x django-models django-forms django-templates django-views


    【解决方案1】:

    一天的变化有多大……

    def get_initial(self):
        initial = super(BookView, self).get_initial()
        author = author.objects.get(pk=self.kwargs["pk"])
        initial = author.__dict__.copy()
        initial.update({              
                "author": author.name.all(),
           }}  
        return initial
    

    我在最初的 get 中对 manytomanyfield 的引用之后添加了一个 .all(),并且还更新了表单以获取相关字段。比我一路走来的一些技巧要干净得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-01
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 2015-08-26
      相关资源
      最近更新 更多