我已經創建了一個模型,它將自動顯示模型中的所有字段,并將其顯示在管理頁面上。
現在,我有一個問題,我希望在同一行中有兩個字段,為此,我必須在modeladmin中指定字段集:
1
2
3
4
5fieldsets = (
(None, {
'fields': (('firstname', 'lastname'),)
}),
)
是否必須指定所有字段?因為數據庫中有許多字段需要指定。
只是我頭腦中的一個想法。這個問題告訴我們如何獲取模型字段的列表。獲取所有字段的列表,并使用set difference刪除firstname, lastname。
將這些字段包裝在它們自己的元組上。
1
2
3
4
5class testAdmin(admin.ModelAdmin): fields = (
'field1',
('field2', 'field3'),
'field4'
)
在上面的示例中,字段field2和field3顯示在一行上。
有一篇文章可能有用
文章引用如下:
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
{% if fieldset.name %}{{ fieldset.name }}{% endif %}
{% if fieldset.description %}
{{ fieldset.description|safe }}
{% endif %}
{% for line in fieldset %}
{% cycle '
{{ line.errors }}
{% for field in line %}
{% 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 %}
{% cycle '' '
' %}{% endfor %}
號
恐怕沒有一個簡單的方法。
一個選項是重寫modeladmin的change_form.html模板,并根據需要設置表單樣式。
另一種選擇是執行自定義ModelForm并使用呈現兩個輸入字段的小部件定義字段,在表單的.save()方法中,將小部件結果值(元組)設置為兩個字段。
謝謝,我正在找更容易的東西。
這對我有效
1
2
3fieldsets=(
("My Group",{"fields": (tuple(['field1','field1']),),}),
)
同意,這很煩人,但它的元組來自字段列表。您可以使用列表理解并將列表更改為元組。下面是一個跳過某些字段的示例,您希望在包括REST Normal方法的同時給予一些特別的注意。
1
2
3
4skipped=[]
alist = [field.name for field in ._meta.fields if field.name not in skipped]
fieldsets = tuple(alist)
*** play with skipped ***
號
稍微調整一下就可以了。
這很愚蠢,但是是的,如果要使用fieldsetstuple-within-a-tuple方法,那么必須指定表單上應該顯示的所有字段。
這實際上是對"必須指定所有字段嗎?"