Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django admin在同一行上显示多个字段_Python_Django_Django Admin - Fatal编程技术网

Python Django admin在同一行上显示多个字段

Python Django admin在同一行上显示多个字段,python,django,django-admin,Python,Django,Django Admin,我已经创建了一个模型,它将自动显示模型中的所有字段,并显示在管理页面上 现在,我有一个问题,我想在同一行上有两个字段,为此,我必须在ModelAdmin中指定字段集: fieldsets = ( (None, { 'fields': (('firstname', 'lastname'),) }), ) 我必须指定所有字段吗?因为数据库中有许多字段需要指定。恐怕没有简单的方法 一个选项是覆盖该ModelAdmin的change

我已经创建了一个模型,它将自动显示模型中的所有字段,并显示在管理页面上

现在,我有一个问题,我想在同一行上有两个字段,为此,我必须在ModelAdmin中指定字段集:

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

我必须指定所有字段吗?因为数据库中有许多字段需要指定。

恐怕没有简单的方法

一个选项是覆盖该ModelAdmin的change_form.html模板,并根据需要设置表单样式


另一种选择是使用自定义ModelForm并使用呈现两个输入字段的小部件定义一个字段,在表单的.save()方法中,将小部件的结果值(元组)设置为两个字段。

这很愚蠢,但如果要使用
字段集
元组内元组方法,然后,您必须指定表单上应显示的所有字段。

有一篇文章可能有用

文章引述如下:


Django很棒。捆绑的管理界面使它更好。但是,随着表单上项目的数量越来越大,由于布局是单列的,因此浪费的空间量也会增加。再加上宽屏显示器上的左对齐,我的用户通常以一种我们称之为“眼球错位”的状态结束他们的一天

因此,我即兴创作并将形式(和堆叠线)更改为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>

{%if fieldset.name%}{{fieldset.name}{%endif%}
{%if fieldset.description%}
{{fieldset.description | safe}}
{%endif%}
{字段集%中的行的%s}
{%周期''''%}
{{line.errors}}
{第%行中的字段为%1}
{%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%} {%周期''''%} {%endfor%}

将这些字段包装到它们自己的元组中

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

在上面的示例中,字段
field2
field3
显示在一行上。

同意,这很烦人,但它是字段列表中的元组元组。 您可以使用列表理解并将列表更改为元组。 下面是一个跳过某些字段的示例,您希望在以常规方式包括rest时给予一些特别注意

skipped=[]
alist = [field.name for field in <model_name>._meta.fields if field.name not in skipped]
fieldsets = tuple(alist)
*** play with skipped ***
跳过=[]
alist=[中字段的field.name.\u如果field.name不在,则跳过meta.fields]
字段集=元组(列表)
***玩跳过的***
通过一些小的调整,这应该是可行的。

这对我来说是可行的

fieldsets=(        
       ("My Group",{"fields": (tuple(['field1','field1']),),}), 
    )

谢谢,我发现了一些更简单的问题。这实际上是对“我必须指定所有字段吗?”这个问题的悲哀回答,只是我脑子里的一个想法。说明如何获取模型字段列表。获取所有字段的列表,并使用
设置差异