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在内联表单管理中获取实例所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)