2016-01-13 9 views
1

Я использую Django 1.9 и django.contrib.gis с Area модель, которая имеет огромный MultiPolygonField: ГИСКак игнорировать загрузку огромных полей в django admin list_display?

# models.py 
from django.contrib.gis.db import models as gis_models 

class Area(gis_models.Model): 

    area_color = gis_models.IntegerField() 
    mpoly = gis_models.MultiPolygonField(srid=4326) 

    class Meta: 
     verbose_name = 'Area' 
     verbose_name_plural = 'Areas' 

У меня есть соответствующий AreaAdmin класс по управлению Area S внутри Джанго администратора:

# admin.py 
from django.contrib.gis import admin as gis_admin 

class AreaAdmin(gis_admin.OSMGeoAdmin): 
    map_width = 800 
    map_height = 600 
    modifiable = False 
    list_display = ['area_color', ] 
    exclude = ['mpoly', ] 
gis_admin.site.register(Area, AreaAdmin) 

Проблема в том, что, хотя я использую list_display, который не содержит mpoly и атрибут exclude, чтобы предотвратить его отображение в представлении формы, при отображении вида списка он по-прежнему выбирает все t он поля из базы данных и загружает его в память. Поскольку mpoly настолько велика, у меня возникают случайные ошибки (segfault, обработанный убит, ...), и для отображения списка требуется много минут, чтобы отобразить некоторые простые целочисленные поля ...

Есть ли способ рассказать django не загружать mpoly в память, чтобы полностью игнорировать его в запросе базы данных, чтобы он быстро загружался? Я ничего не нашел в документации, кроме exclude, чтобы дистанционно достичь этого. Я спрашиваю здесь, если я что-то упустил.

Благодарим за помощь.

ответ

0

Вы можете попробовать переопределить метод get_queryset, используемый при создании списка для AreaAdmin.

class AreaAdmin(gis_admin.OSMGeoAdmin): 

    def get_queryset(self, request): 
     qs = super(AreaAdmin, self).get_queryest(request) 

     # tell Django to not retrieve mpoly field from DB 
     qs = qs.defer('mpoly') 
     return qs 

Для получения дополнительной информации о defer см https://docs.djangoproject.com/es/1.9/ref/models/querysets/#defer

+0

Удивительно! Именно то, что мне нужно, и не удалось найти в процессе поиска. Благодаря ! – achedeuzot

Смежные вопросы