Упорядочивание столбцов в админке Django не работает на удаленном сервере, но локально все в порядке
В админке Django я могу упорядочить каждую таблицу в соответствии с любым столбцом, который я хочу, без необходимости указывать что-либо в модели:
После нажатия на заголовок столбца обычно появляется маленькая стрелка, описывающая порядок следования.
admin.py:
from django.contrib import admin
from .models import User
from .resources import UserAdminResource
from import_export.admin import ExportActionModelAdmin
class UserAdmin(ExportActionModelAdmin, admin.ModelAdmin):
resource_class = UserAdminResource
list_display = [f.name for f in User._meta.fields]
list_display.remove("id")
admin.site.register(User, UserAdmin)
resources.py:
from import_export import resources
from .models import User
class UserAdminResource(resources.ModelResource):
class Meta:
model = User
models.py:
from django.db import models
from django.conf import settings
class User(models.Model):
name = models.CharField(
max_length=256, verbose_name=_("Name"), null=False
)
address = models.CharField(
max_length=256, verbose_name=_("Address"), null=True, blank=True
)
city = models.CharField(
max_length=256, verbose_name=_("City"), null=True, blank=True
)
class Meta:
verbose_name = _("User")
verbose_name_plural = _("Users")
def __str__(self):
return self.name
Но при развертывании на удаленном сервере щелчок на заголовке столбца заставляет его быстро мигать, но это не работает (т.е. не упорядочивает строки), даже при этом URL меняется на: server.org/admin/lorem/user/?o=2
например.
Есть ли что-то особенное, что нужно сделать, когда нужно сортировать колонки в админке Django на удаленном сервере по сравнению с локальной машиной?
И локальное, и удаленное развертывание находятся в одной ветке с одинаковым окружением (docker).
Единственное отличие, которое я заметил, это дополнительная первая строка в сетевом менеджере моего браузера, когда я нажимаю на заголовок столбца:
Django version 4.1.2
/ Python 3.9.14
Поскольку недавно я заметил, проделав неправильную манипуляцию, что заказ на самом деле работает на удаленном сервере, попадая на URL, когда указан исходный порт, например server.org:80/admin/lorem/user/?o=2
, и что это не так, когда порт не указан, я заподозрил плохо написанное правило в моей конфигурации Nginx.
И это действительно было так.
Согласно: https://stackoverflow.com/a/8130872/6630397 необходимо вручную построить полный URL.
Так что я обновил это:
location ~ ^/(.*)$ {
include proxy_params;
proxy_pass http://127.0.0.1:81/$1;
}
на это:
location ~ ^/(.*)$ {
include proxy_params;
proxy_pass http://127.0.0.1:81/$1$is_args$args;
}
И вдруг это работает.
Я думал, что $1
на самом деле перехватывает все до конца URL, независимо от того, присутствуют ли параметры запроса или нет. Но, похоже, так не работает
Больше: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass