在Django模型formset中设置每个表单的实例

在Django模型formset中设置每个表单的实例,第1张

概述使用Django模型表单时,我经常这样做: def my_view(request): new_entry = MyModel(name='a') form = MyModelForm(instance=new_entry) ... 我想用modelformset做类似的事情.这样的事情是理想的: def my_view(request): MyFormSet = 使用Django模型表单时,我经常这样做:

def my_vIEw(request):    new_entry = MyModel(name='a')    form = MyModelForm(instance=new_entry)    ...

我想用modelformset做类似的事情.这样的事情是理想的:

def my_vIEw(request):    MyFormSet = modelformset_factory(MyModel,form=MyModelForm)    new_entrIEs = [MyModel(name='a'),MyModel(name='b')]    formset = MyFormSet(instances=new_entrIEs) # off course this does not work    ...

由于项目尚未存储在数据库中,因此无法使用查询集设置实例.如果我想使用初始我必须声明表单中的字段,这是不理想的,似乎有点Hacky.

有关如何在modelformset中设置每个模型的实例的任何建议吗?

解决方法 好的,我想我找到了解决方案.

class FormSetWithInstances(BaseFormSet):    def __init__(self,*args,**kwargs):        self.instances = kwargs.pop('instances')        super(FormSetWithInstances,self).__init__(*args,**kwargs)    def get_form_kwargs(self,index):        form_kwargs = super(FormSetWithInstances,self).get_form_kwargs(index)        if index < len(self.instances):            form_kwargs['instance'] = self.instances[index]        return form_kwargs

使用此modelformsets或inlinemodelformsets时要小心,因为查询集将覆盖您设置的实例.

总结

以上是内存溢出为你收集整理的在Django模型formset中设置每个表单的实例全部内容,希望文章能够帮你解决在Django模型formset中设置每个表单的实例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1193635.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存