Django在内联表单管理中获取实例

Django在内联表单管理中获取实例,第1张

概述有一个内联表单类: class ItemColorSelectForm(forms.ModelForm): def __init__(self, *args, **kwargs): super(ItemColorSelectForm, self).__init__(*args, **kwargs) #here i need current object 内联 有一个内联表单类:
class ItemcolorSelectForm(forms.ModelForm):    def __init__(self,*args,**kwargs):        super(ItemcolorSelectForm,self).__init__(*args,**kwargs)        #here i need current object

内联类:

class ItemcolorSelectInline(generic.GenericTabularInline):    model = colorSelect    extra = 1    form = ItemcolorSelectForm

管理员班

class Itemadmin(admin.Modeladmin):    inlines = [ItemcolorInline,]

问题:如何在ItemcolorSelectForm中获取当前对象.

打印kwargs返回:

{'auto_ID': u'ID_%s','prefix': u'catalog-colorselect-content_type-object_ID-__prefix__','empty_permitted': True}
解决方法 目前接受的解决方案不是线程安全的如果您关心线程安全,请永远不要将实例分配给静态类属性.

线程安全解决方案是:

对于Django 1.7< 1.9(可能是早期版本,不清楚):

from django.utils.functional import cached_propertydef get_formset(self,**kwargs):    FormSet = super(Inlineadmin,self).get_formset(*args,**kwargs)    class ProxyFormSet(FormSet):        def __init__(self,**kwargs):            self.instance = kwargs['instance']            super(ProxyFormSet,**kwargs)        @cached_property        def forms(self):            kwargs = {'instance': self.instance}            forms = [self._construct_form(i,**kwargs)                     for i in xrange(self.total_form_count())]            return forms    return ProxyFormSet

从Django 1.9> =它也可以传递form_kwargs:

def get_formset(self,**kwargs):            form_kwargs = kwargs.pop('form_kwargs',{})            form_kwargs['instance'] = kwargs['instance']        super(ProxyFormSet,self).__init__(            *args,form_kwargs=form_kwargs,**kwargs)    return ProxyFormSet

以上解决方案将以模型形式提供实例kwarg:

class InlineForm(forms.ModelForm):    def __init__(self,**kwargs):        super(InlineForm,**kwargs)        print('instance',kwargs['instance'])
总结

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

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存