[英]Django admin display multiple fields on the same line
我創建了一個 model,它會自動顯示 model 中的所有字段並顯示在管理頁面上。
現在,我有一個問題,我想在同一行上有兩個字段,為此我必須在 ModelAdmin 中指定字段集:
fieldsets = (
(None, {
'fields': (('firstname', 'lastname'),)
}),
)
我必須指定所有字段嗎? 因為數據庫中有很多字段我需要指定。
將這些字段包裝在它們自己的元組上。
class TestAdmin(admin.ModelAdmin):
fields = (
'field1',
('field2', 'field3'),
'field4'
)
在上面的示例中,字段field2
和field3
顯示在一行上。
有一篇文章可能有用
http://amk1.wordpress.com/2010/09/23/a-2-column-django-admin-form/
文章引用如下:
Django 很棒。 捆綁的管理界面使它變得更好。 但是隨着表單上的項目數量越來越多,浪費的空間量也會增加,因為布局是單列的。 再加上寬屏顯示器上的左 alignment,我的用戶通常會以我們稱之為“眼球錯位”的情況結束他們的一天。
所以我即興創作並將表單(和 StackedInline)更改為 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>
恐怕沒有一個簡單的方法可以做到這一點。
一種選擇是覆蓋該 ModelAdmin 的 change_form.html 模板,並根據需要設置表單樣式。
另一種選擇是自定義 ModelForm 並使用呈現兩個輸入字段的小部件定義一個字段,在表單的 .save() 方法中,將小部件結果值(一個元組)設置為兩個字段。
同意,這很煩人,但它的元組來自字段列表。 您可以使用列表理解並將列表更改為元組。 這是跳過某些字段的示例,您需要特別注意其中包括 rest 正常方式。
skipped=[]
alist = [field.name for field in <model_name>._meta.fields if field.name not in skipped]
fieldsets = tuple(alist)
*** play with skipped ***
稍作調整,這應該可以工作。
這對我有用
fieldsets=(
("My Group",{"fields": (tuple(['field1','field1']),),}),
)
這很愚蠢,但是是的,如果您要使用fieldsets
tuple-within-a-tuple 方法,那么您必須指定應該在表單上顯示的所有字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.