def get_form_layout(self): layout = copy.deepcopy(self.form_layout) arr = self.form_obj.fields.keys() arr = [k for k in arr] fields = arr + list(self.get_readonly_fields()) if layout is None: layout = Layout(Container(Col('full', Fieldset("", *fields, css_class="unsort no_title"), horizontal=True, span=12) )) elif type(layout) in (list, tuple) and len(layout) > 0: if isinstance(layout[0], Column): fs = layout elif isinstance(layout[0], (Fieldset, TabHolder)): fs = (Col('full', *layout, horizontal=True, span=12),) else: fs = (Col('full', Fieldset("", *layout, css_class="unsort no_title"), horizontal=True, span=12),) layout = Layout(Container(*fs)) rendered_fields = [i[1] for i in layout.get_field_names()] container = layout[0].fields other_fieldset = Fieldset(_(u'Other Fields'), *[f for f in fields if f not in rendered_fields]) if len(other_fieldset.fields): if len(container) and isinstance(container[0], Column): container[0].fields.append(other_fieldset) else: container.append(other_fieldset) return layout
def get_form_layout(self): layout = copy.deepcopy(self.detail_layout or self.form_layout) if layout is None: layout = Layout(Container( Fieldset("", *self.form_obj.fields.keys(), css_class="unsort no_title"), css_class="form-horizontal" )) elif type(layout) in (list, tuple) and len(layout) > 0: if isinstance(layout[0], Column): layout = Layout(Container(*layout)) elif isinstance(layout[0], Fieldset): layout = Layout( Container(*layout, css_class="form-horizontal")) else: layout = Layout(Container(Fieldset("", *layout, css_class="unsort no_title"), css_class="form-horizontal")) if self.detail_show_all: rendered_fields = [i[1] for i in layout.get_field_names()] container = layout[0].fields other_fieldset = Fieldset(_(u'Other Fields'), *[f for f in self.form_obj.fields.keys() if f not in rendered_fields]) if len(other_fieldset.fields): if len(container) and isinstance(container[0], Column): container[0].fields.append(other_fieldset) else: container.append(other_fieldset) return layout
def get_form_layout(self): if self.request.user.is_superuser: self.form_layout = Layout(Container(Col('full', Fieldset( "", "title", "content", "user", css_class="unsort no_title"), horizontal=True, span=12) )) else: self.form_layout = Layout(Container(Col('full', Fieldset( "", "title", "content", css_class="unsort no_title"), horizontal=True, span=12) )) return super(ArticleAdmin, self).get_form_layout()
def get_form_layout(self): """ 返回 Form Layout ,如果您设置了 :attr:`detail_layout` 属性,则使用 :attr:`form_layout` 属性,如果都没有该方法会自动生成 Form Layout 。 有关 Form Layout 的更多信息可以参看 `Crispy Form 文档 <http://django-crispy-forms.readthedocs.org/en/latest/layouts.html>`_ 设置 Form Layout 可以非常灵活的显示页面的各个元素 """ # 复制避免修改属性值 layout = copy.deepcopy(self.detail_layout or self.form_layout) if layout is None: layout = Layout( Container( Col('full', Fieldset("", *self.form_obj.fields.keys(), css_class="unsort no_title"), horizontal=True, span=12))) elif type(layout) in (list, tuple) and len(layout) > 0: # 如果设置的 layout 是一个列表,那么按以下方法生成 if isinstance(layout[0], Column): fs = layout elif isinstance(layout[0], (Fieldset, TabHolder)): fs = (Col('full', *layout, horizontal=True, span=12), ) else: fs = (Col('full', Fieldset("", *layout, css_class="unsort no_title"), horizontal=True, span=12), ) layout = Layout(Container(*fs)) if self.detail_show_all: # 显示没有在 Layout 中出现的字段 rendered_fields = [i[1] for i in layout.get_field_names()] container = layout[0].fields other_fieldset = Fieldset( _(u'Other Fields'), *[ f for f in self.form_obj.fields.keys() if f not in rendered_fields ]) if len(other_fieldset.fields): if len(container) and isinstance(container[0], Column): container[0].fields.append(other_fieldset) else: container.append(other_fieldset) return layout
def get_form_layout(self): """ 返回 Form Layout ,如果您设置了 :attr:`form_layout` 属性,则使用该属性,否则该方法会自动生成 Form Layout 。 有关 Form Layout 的更多信息可以参看 `Crispy Form 文档 <http://django-crispy-forms.readthedocs.org/en/latest/layouts.html>`_ 设置 Form Layout 可以非常灵活的显示表单页面的各个元素 """ layout = copy.deepcopy(self.form_layout) arr = self.form_obj.fields.keys() if six.PY3: arr = [k for k in arr] fields = arr + list(self.get_readonly_fields()) if layout is None: layout = Layout( Container( Col('full', Fieldset("", *fields, css_class="unsort no_title"), horizontal=True, span=12))) elif type(layout) in (list, tuple) and len(layout) > 0: # 如果设置的 layout 是一个列表,那么按以下方法生成 if isinstance(layout[0], Column): fs = layout elif isinstance(layout[0], (Fieldset, TabHolder)): fs = (Col('full', *layout, horizontal=True, span=12), ) else: fs = (Col('full', Fieldset("", *layout, css_class="unsort no_title"), horizontal=True, span=12), ) layout = Layout(Container(*fs)) rendered_fields = [i[1] for i in layout.get_field_names()] container = layout[0].fields other_fieldset = Fieldset( _(u'Other Fields'), *[f for f in fields if f not in rendered_fields]) # 将所有没有显示的字段和在一个 Fieldset 里面显示 if len(other_fieldset.fields): if len(container) and isinstance(container[0], Column): # 把其他字段放在第一列显示 container[0].fields.append(other_fieldset) else: container.append(other_fieldset) return layout
class PostInline: form_layout = ( Container(Row('title','desc') ) ) extra = 1 model = Post
class PostInline: form_layout = ( Container( Row("title", "desc"), ) ) extra = 1 # 控制额外多几个 model = Post
class PostInline: form_layout = ( Container( Row("title", "desc") ), ) extra = 1 # 定义额外内联表单(空的表单,用于新增)的数量为1 model = Post
class PostInline: # xamdin 处理inline form_layout = (Container(Row('title', 'desc'), )) # admin的使用方法 # fields = ('title', 'desc') extra = 1 model = Post
class PostInline: """ 可选择继承自admin.StackedInline,以获取不同的展示样式 """ form_layout = (Container(Row("title", "desc"))) extra = 1 # 控制额外多几个 model = Post
class PostInline: # StackedInline 样式不同 form_layout = ( Container( Row('title', 'desc') ) ) extra = 0 # 控制额外多几个 model = Post
def get_form_layout(self): layout = copy.deepcopy(self.detail_layout or self.form_layout) if layout is None: layout = Layout( Container( Col( "full", Fieldset("", *self.form_obj.fields.keys(), css_class="unsort no_title"), horizontal=True, span=12, ))) elif type(layout) in (list, tuple) and len(layout) > 0: if isinstance(layout[0], Column): fs = layout elif isinstance(layout[0], (Fieldset, TabHolder)): fs = (Col("full", *layout, horizontal=True, span=12), ) else: fs = (Col( "full", Fieldset("", *layout, css_class="unsort no_title"), horizontal=True, span=12, ), ) layout = Layout(Container(*fs)) if self.detail_show_all: rendered_fields = [i[1] for i in layout.get_field_names()] container = layout[0].fields other_fieldset = Fieldset( _(u"Other Fields"), *[ f for f in self.form_obj.fields.keys() if f not in rendered_fields ]) if len(other_fieldset.fields): if len(container) and isinstance(container[0], Column): container[0].fields.append(other_fieldset) else: container.append(other_fieldset) return layout
class PostInline: # admin写法 fields = ('title', 'desc') form_layout = ( Container( Row("title", "desc"), ) ) extra = 1 # 控制额外多几个 model = Post
def do_action(self, queryset): if not self.has_change_permission(): raise PermissionDenied change_fields = [ f for f in self.request.POST.getlist(BATCH_CHECKBOX_NAME) if f in self.batch_fields ] if change_fields and self.request.POST.get("post"): self.form_obj = self.get_change_form(True, change_fields)( data=self.request.POST, files=self.request.FILES) if self.form_obj.is_valid(): self.change_models(queryset, self.form_obj.cleaned_data) return None else: self.form_obj = self.get_change_form(False, self.batch_fields)() helper = FormHelper() helper.form_tag = False helper.include_media = False helper.add_layout( Layout( Container( Col( "full", Fieldset("", *self.form_obj.fields.keys(), css_class="unsort no_title"), horizontal=True, span=12, )))) self.form_obj.helper = helper count = len(queryset) if count == 1: objects_name = force_text(self.opts.verbose_name) else: objects_name = force_text(self.opts.verbose_name_plural) context = self.get_context() context.update({ "title": _("Batch change %s") % objects_name, "objects_name": objects_name, "form": self.form_obj, "queryset": queryset, "count": count, "opts": self.opts, "app_label": self.app_label, "action_checkbox_name": ACTION_CHECKBOX_NAME, }) return TemplateResponse( self.request, self.batch_change_form_template or self.get_template_list("views/batch_change_form.html"), context, )
class PostInline(): # 在 分类详细页 内置关联数据() 文章编辑 form_layout = ( Container( Row("title", "desc",) ) ) extra = 1 # 控制额外多几个 model = Post
def do_action(self, queryset): if not self.has_change_permission(): raise PermissionDenied change_fields = [ f for f in self.request.POST.getlist(BATCH_CHECKBOX_NAME) if f in self.batch_fields ] if change_fields and self.request.POST.get('post'): self.form_obj = self.get_change_form(True, change_fields)( data=self.request.POST, files=self.request.FILES) if self.form_obj.is_valid(): self.change_models(queryset, self.form_obj.cleaned_data) return None else: self.form_obj = self.get_change_form(False, self.batch_fields)() helper = FormHelper() helper.form_tag = False helper.add_layout( Layout( Container( Col('full', Fieldset("", *list(self.form_obj.fields.keys()), css_class="unsort no_title"), horizontal=True, span=12)))) self.form_obj.helper = helper count = len(queryset) if count == 1: objects_name = self.opts.verbose_name else: objects_name = self.opts.verbose_name_plural context = self.get_context() context.update({ "title": _("Batch change %s") % objects_name, 'objects_name': objects_name, 'form': self.form_obj, 'queryset': queryset, 'count': count, "opts": self.opts, "app_label": self.app_label, 'action_checkbox_name': ACTION_CHECKBOX_NAME, }) return TemplateResponse( self.request, self.batch_change_form_template or self.get_template_list('views/batch_change_form.html'), context, current_app=self.admin_site.name)
def do_action(self, queryset): if not self.has_change_permission(): raise PermissionDenied form_class = self.get_change_form() if self.request.POST.get('post'): self.form_obj = form_class(data=self.request.POST, files=self.request.FILES) return None else: self.form_obj = form_class() helper = FormHelper() helper.form_tag = False # 默认不需要 crispy 生成 form_tag helper.add_layout( Layout( Container(Fieldset("", *self.form_obj.fields.keys(), css_class="unsort no_title"), css_class="form-horizontal"))) self.form_obj.helper = helper if len(queryset) == 1: objects_name = force_unicode(self.opts.verbose_name) else: objects_name = force_unicode(self.opts.verbose_name_plural) context = self.get_context() context.update({ "title": _("Change %s") % objects_name, 'form': self.form_obj, 'queryset': queryset, "opts": self.opts, "app_label": self.app_label, 'action_checkbox_name': ACTION_CHECKBOX_NAME, }) return TemplateResponse( self.request, self.batch_change_form_template or self.get_template_list('views/batch_change_form.html'), context, current_app=self.admin_site.name)
class PostInline: form_layout = (Container(Row('title', 'desc'), ), ) extra = 1 # 控制额外多几个 model = Post
class PostInline: """ 同一个界面编辑两个model """ form_layout = (Container(Row('title', 'summary'))) extra = 1 model = Post
class PostInline: model = Post extra = 1 # 可以添加几篇文章 form_layut = (Container(Row('title', 'desc'), ))
class PostInline: # StackedInline form_layout = (Container(Row("title", "desc"), )) extra = 1 model = Post
class PostInline(object): # 可选择继承自 admin.StackedInline, 以获取不同的展示样式 form_layout = (Container(Row('title', 'desc'), )) extra = 1 # 控制额外多几个 model = Post
class PostInline: # admin.TabularInline """ 对于需要在一个页面内完成两个关联模型编辑编辑的需求,inline admin非常合适 """ form_layout = (Container(Row('title', 'desc', 'owner'), )) extra = 2 model = Post
class PostInline: # 文章可编辑的项目 form_layout = (Container(Row('title', 'desc'), )) # 显示1行可编辑对象 extra = 1 model = Post
class PostInline(object): # admin.StackedInline 只是样式不同 """内联数据管理---分类下面直接管理相对应的文章""" form_layout = (Container(Row('title', 'desc'))) extra = 0 # 控制额外多出几个 model = Post
class PostInline: # 可以选择继承 admin.TabularInline admin.StackedInline form_layout = (Container(Row("title", "desc"), )) extra = 1 # 控制额外显示几个 model = Post
class AnimeInline: form_layout = (Container(Row('title', 'desc'))) extra = 1 model = Anime
class PostInLine: form_layout = (Container(Row('title', 'desc'))) extra = 0 # 额外控制多少个 model = Post
class PostInline(admin.TabularInline): # fields = ('title', 'desc') form_layout = (Container(Row('title', 'desc'), )) extra = 5 model = Post
class PostInline: # StackedInline 样式不同 """例子:在分类页面直接编辑文章""" form_layout = [Container(Row('title', 'desc'), )] extra = 1 # 控制额外多几个 model = Post