Python Django admin在同一行上显示多个字段
我已经创建了一个模型,它将自动显示模型中的所有字段,并显示在管理页面上 现在,我有一个问题,我想在同一行上有两个字段,为此,我必须在ModelAdmin中指定字段集:Python Django admin在同一行上显示多个字段,python,django,django-admin,Python,Django,Django Admin,我已经创建了一个模型,它将自动显示模型中的所有字段,并显示在管理页面上 现在,我有一个问题,我想在同一行上有两个字段,为此,我必须在ModelAdmin中指定字段集: fieldsets = ( (None, { 'fields': (('firstname', 'lastname'),) }), ) 我必须指定所有字段吗?因为数据库中有许多字段需要指定。恐怕没有简单的方法 一个选项是覆盖该ModelAdmin的change
fieldsets = (
(None, {
'fields': (('firstname', 'lastname'),)
}),
)
我必须指定所有字段吗?因为数据库中有许多字段需要指定。恐怕没有简单的方法 一个选项是覆盖该ModelAdmin的change_form.html模板,并根据需要设置表单样式
另一种选择是使用自定义ModelForm并使用呈现两个输入字段的小部件定义一个字段,在表单的.save()方法中,将小部件的结果值(元组)设置为两个字段。这很愚蠢,但如果要使用
字段集
元组内元组方法,然后,您必须指定表单上应显示的所有字段。有一篇文章可能有用
文章引述如下:
Django很棒。捆绑的管理界面使它更好。但是,随着表单上项目的数量越来越大,由于布局是单列的,因此浪费的空间量也会增加。再加上宽屏显示器上的左对齐,我的用户通常以一种我们称之为“眼球错位”的状态结束他们的一天 因此,我即兴创作并将形式(和堆叠线)更改为2-up布局。不再有“眼球错位” Django 1.2.1的相应模板(/contrib/admin/templates/admin/includes/fieldset.html)如下所示,修改后的行突出显示:
<fieldset class="module aligned {{ fieldset.classes }}">
{% if fieldset.name %}<h2>{{ fieldset.name }}</h2>{% endif %}
{% if fieldset.description %}
<div class="description">{{ fieldset.description|safe }}</div>
{% endif %}
<table border=0 width=100%>
{% for line in fieldset %}
{% cycle '<tr>' '' %}
<td width=50%>
<div style="border-bottom:0" class="form-row{% if line.errors %} errors{% endif %}{% for field in line %} {{ field.field.name }}{% endfor %}">
{{ line.errors }}
{% for field in line %}
<div{% if not line.fields|length_is:"1" %} class="field-box"{% endif %}>
{% if field.is_checkbox %}
{{ field.field }}{{ field.label_tag }}
{% else %}
{{ field.label_tag }}
{% if field.is_readonly %}
<p>{{ field.contents }}</p>
{% else %}
{{ field.field }}
{% endif %}
{% endif %}
{% if field.field.field.help_text %}
<p class="help">{{ field.field.field.help_text|safe }}</p>
{% endif %}
</div>
{% endfor %}
</div>
</td>
{% cycle '' '</tr>' %}
{% endfor %}
</table>
</fieldset>
{%if fieldset.name%}{{fieldset.name}{%endif%}
{%if fieldset.description%}
{{fieldset.description | safe}}
{%endif%}
{字段集%中的行的%s}
{%周期''''%}
{{line.errors}}
{第%行中的字段为%1}
{%if field.is_checkbox%}
{{field.field}{{field.label_tag}}
{%else%}
{{field.label_tag}
{%if field.is_readonly%}
{{field.contents}
{%else%}
{{field.field}
{%endif%}
{%endif%}
{%if field.field.field.help_text%}
{{field.field.field.help_text | safe}
{%endif%}
{%endfor%}
{%周期''''%}
{%endfor%}
将这些字段包装到它们自己的元组中
class TestAdmin(admin.ModelAdmin):
fields = (
'field1',
('field2', 'field3'),
'field4'
)
在上面的示例中,字段
field2
和field3
显示在一行上。同意,这很烦人,但它是字段列表中的元组元组。
您可以使用列表理解并将列表更改为元组。
下面是一个跳过某些字段的示例,您希望在以常规方式包括rest时给予一些特别注意
skipped=[]
alist = [field.name for field in <model_name>._meta.fields if field.name not in skipped]
fieldsets = tuple(alist)
*** play with skipped ***
跳过=[]
alist=[中字段的field.name.\u如果field.name不在,则跳过meta.fields]
字段集=元组(列表)
***玩跳过的***
通过一些小的调整,这应该是可行的。这对我来说是可行的
fieldsets=(
("My Group",{"fields": (tuple(['field1','field1']),),}),
)
谢谢,我发现了一些更简单的问题。这实际上是对“我必须指定所有字段吗?”这个问题的悲哀回答,只是我脑子里的一个想法。说明如何获取模型字段列表。获取所有字段的列表,并使用
设置差异