Django admin display multiple fields on the same line
我已经创建了一个模型,它将自动显示模型中的所有字段,并将其显示在管理页面上。
现在,我有一个问题,我希望在同一行中有两个字段,为此,我必须在modeladmin中指定字段集:
1 2 3 4 5 | fieldsets = ( (None, { 'fields': (('firstname', 'lastname'),) }), ) |
是否必须指定所有字段?因为数据库中有许多字段需要指定。
将这些字段包装在它们自己的元组上。
1 2 3 4 5 | class testAdmin(admin.ModelAdmin): fields = ( 'field1', ('field2', 'field3'), 'field4' ) |
在上面的示例中,字段
有一篇文章可能有用
文章引用如下:
Django is great. The bundled admin interface makes it better. But as the number of items on the form gets bigger, the amount of wasted space increases because the layout is single column. Coupled with left alignment on wide-screen monitors, my users usually end their day with a condition we call"eyeballs misalignment".
So I improvised and changed the form (and StackedInline) to a 2-up layout. No more"eyeballs misalignment".
The corresponding template for Django 1.2.1 (/contrib/admin/templates/admin/includes/fieldset.html) looks like this, modified lines highlighted:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 <fieldset class="module aligned {{ fieldset.classes }}">
{% if fieldset.name %}{{ fieldset.name }}{% endif %}
{% if fieldset.description %}
{{ fieldset.description|safe }}
{% endif %}
<table border=0 width=100%>
{% for line in fieldset %}
{% cycle '<tr>' '' %}
<td width=50%>
{{ line.errors }}
{% for field in line %}
{% 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 %}
{% endfor %}
</td>
{% cycle '' '</tr>' %}
{% endfor %}
</table>
</fieldset>
号
恐怕没有一个简单的方法。
一个选项是重写modeladmin的change_form.html模板,并根据需要设置表单样式。
另一种选择是执行自定义ModelForm并使用呈现两个输入字段的小部件定义字段,在表单的.save()方法中,将小部件结果值(元组)设置为两个字段。
这对我有效
1 2 3 | fieldsets=( ("My Group",{"fields": (tuple(['field1','field1']),),}), ) |
同意,这很烦人,但它的元组来自字段列表。您可以使用列表理解并将列表更改为元组。下面是一个跳过某些字段的示例,您希望在包括REST Normal方法的同时给予一些特别的注意。
1 2 3 4 | skipped=[] alist = [field.name for field in <model_name>._meta.fields if field.name not in skipped] fieldsets = tuple(alist) *** play with skipped *** |
号
稍微调整一下就可以了。
这很愚蠢,但是是的,如果要使用