簡體   English   中英

Django admin 在同一行顯示多個字段

[英]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'
    )

在上面的示例中,字段field2field3顯示在一行上。

有一篇文章可能有用

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM