Python Django, использующий wsgi.py с apache2, загружает поля фильтра не по порядку при каждом перезапуске - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть приложение django, которое прекрасно работает при локальном запуске команды python manage.py runsever.Когда я попытался перенести его и изменил свой конфигурационный файл apache для использования wsgi.py, все работало, кроме одной страницы, где поля фильтра django перетасовывались над таблицей django.Каждый раз, когда я перезагружаю сервер apache, поля фильтра снова перемешиваются в новом порядке.Локальный сервер всегда отображает поля фильтра в правильном порядке.Кто-нибудь знает, почему это происходит?

локальный сервер с помощью команды python runserver enter image description here

сервер Apache с использованием wsgi enter image description here

apache2.conf

    WSGIDaemonProcess /SeedInv python-home=/path/to/Software/anaconda3/envs/Django python-path=/path/to/WebServer/SeedInv
    WSGIProcessGroup /SeedInv
    WSGIScriptAlias /SeedInv /path/to/WebServer/SeedInv/SeedInv/wsgi.py process-group=/SeedInv

    <Directory /path/to/WebServer/SeedInv/SeedInv>
    <Files /path/to/WebServer/SeedInv/Seedinv/wsgi.py>
        Require all granted
    </Files>
    </Directory>

    Alias /static "/path/to/WebServer/SeedInv/static"
    <Directory "/path/to/WebServer/SeedInv/static">
        Require all granted
    </Directory>

    Alias /media "/path/to/WebServer/SeedInv/media"
    <Directory "/path/to/WebServer/SeedInv/media">
        Require all granted
    </Directory>

wsgi.py

import os
import sys
sys.path.append('/path/to/anaconda3/envs/Django/lib/python3.6/site-packages')
from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "SeedInv.settings")
application = get_wsgi_application()

filters.py

class GenoFilter(django_filters.FilterSet):

    class Meta:
        model = Genotypes
        fields = {'parent_f_row': ['icontains'],
                  'parent_m_row': ['icontains'],
                  'parent_f_geno': ['icontains'],
                  'parent_m_geno': ['icontains'],
                  'genotype': ['icontains'],
                  'seed_count': ['lt', 'gt'],
                  }

tables.py

class GenotypesTable(tables.Table):
    export_formats = ['tsv']

    class Meta:
        model = Genotypes
        template_name = 'django_tables2/bootstrap.html'

views.py

def InventoryTable(request):
    queryset = Genotypes.objects.all()
    f = GenoFilter(request.GET, queryset=queryset)
    table = GenotypesTable(f.qs)
    RequestConfig(request, paginate={'per_page': 25}).configure(table)

    export_format = request.GET.get('_export', None)
    if TableExport.is_valid_format(export_format):
        exporter = TableExport(export_format, table)
        return exporter.response('table.{}'.format(export_format))

    return render(request, 'Inventory/index.html',
                           {
                            'table': table,
                            'filter': f,
                            })

models.py

# Genotype database model
class Genotypes(models.Model):
    """list of current genotypes"""
    parent_f_row = models.CharField(max_length=200,
                                    validators=[],)
    parent_m_row = models.CharField(max_length=200,
                                    validators=[],)
    parent_f_geno = models.CharField(max_length=200,
                                     validators=[],)
    parent_m_geno = models.CharField(max_length=200,
                                     validators=[],)
    genotype = models.CharField(max_length=200,
                                validators=[],)
    seed_count = models.IntegerField(validators=[], default=0)
    actual_count = models.BooleanField(default=False)
    experiment = models.CharField(max_length=200,
                                  validators=[],
                                  blank=True,)
    comments = models.CharField(max_length=300,
                                validators=[],
                                blank=True,
                                )

    def __str__(self):
        return self.genotype

    class Meta:
        verbose_name_plural = "Genotypes"

Спасибо за помощь!

1 Ответ

0 голосов
/ 13 декабря 2018

До Python 3.7 вы не должны полагаться на заказанные словари.Вы можете использовать OrderedDict, если важен порядок ключей.

from collections import OrderedDict

class GenoFilter(django_filters.FilterSet):

    class Meta:
        model = Genotypes
        fields = OrderedDict([
            ('parent_f_row', ['icontains']),
            ('parent_m_row', ['icontains']),
            ('parent_f_geno', ['icontains']),
            ('parent_m_geno', ['icontains']),
            ('genotype', ['icontains']),
            ('seed_count', ['lt', 'gt']),
        ])                  
...