Администратор Django отображает несколько полей в одной строке - PullRequest
16 голосов
/ 02 мая 2011

Я создал модель, она автоматически отобразит все поля модели и отобразит ее на странице администратора.

Теперь у меня проблема, я хотел бы иметь два поля в одной строке, для этого мне нужно указать наборы полей в ModelAdmin:

fieldsets = (
        (None, {
            'fields': (('firstname', 'lastname'),)
        }),
       )

Нужно ли указывать все поля? Поскольку в базе данных есть много полей, которые мне нужно указать.

Ответы [ 6 ]

23 голосов
/ 20 января 2016

Оберните эти поля в свой собственный кортеж.

class testAdmin(admin.ModelAdmin): fields = (
     'field1',
     ('field2', 'field3'),
     'field4'
)

В приведенном выше примере поля field2 и field3 показаны в одной строке.

2 голосов
/ 02 сентября 2013

Есть статья может быть полезной

http://amk1.wordpress.com/2010/09/23/a-2-column-django-admin-form/

Статья цитируется ниже:


Джанго великолепен.В комплекте интерфейс администратора делает его лучше.Но по мере того, как количество элементов в форме увеличивается, количество потерянного пространства увеличивается, поскольку макет представляет собой один столбец.В сочетании с выравниванием по левому краю на широкоэкранных мониторах мои пользователи обычно заканчивают свой день условием, которое мы называем «смещение глазных яблок».

Таким образом, я импровизировал и изменил форму (и StackedInline) на макет из двух частей.Больше нет «смещения глазных яблок».

Соответствующий шаблон для 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>
2 голосов
/ 02 мая 2011

Боюсь, что сделать это нелегко.

Один из вариантов - переопределить шаблон change_form.html для этого ModelAdmin и стилизовать форму так, как вам нравится.

Другой альтернативой является создание настраиваемой ModelForm и определение поля с виджетом, который отображает два поля ввода, в методе .save () формы установите итоговое значение виджета (кортеж) для обоих полей.

1 голос
/ 13 августа 2018

это сработало для меня

fieldsets=(        
       ("My Group",{"fields": (tuple(['field1','field1']),),}), 
    )
1 голос
/ 16 февраля 2017

Договорились, что это раздражает, но это кортеж из кортежей из списка полей.Вы можете использовать понимание списка и изменить список на кортеж.Вот пример для пропуска некоторых полей, которым вы хотите уделить особое внимание, В то время как отдых нормальным образом.

skipped=[]
alist = [field.name for field in <model_name>._meta.fields if field.name not in skipped]
fieldsets = tuple(alist)
*** play with skipped ***

с небольшой настройкой, это должно работать.

1 голос
/ 02 мая 2011

Это глупо, но да, если вы собираетесь использовать метод fieldsets tuple-in-a-tuple, вам необходимо указать все поля, которые должны отображаться в вашей форме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...