tutorial theme template sqlmigrate createsuperuser python django django-admin

python - theme - django-admin createsuperuser



Paginator para modelos en línea en django admin (4)

¿Has comprobado el atributo raw_id_fields ? Creo que podría resultarte útil.

Tengo este modelo de django simple que consiste en un sensor y valores para el sensor específico. El número de valores por piranómetro es alto (> 30k). ¿Es posible de alguna manera paginar los PyranometerValues de PyranometerValues por un día específico o aplicar un paginador a la vista en línea del administrador?

class Pyranometer(models.Model): name = models.CharField(max_length=75) class PyranometerValues(models.Model): timestamp = models.DateTimeField() value = models.DecimalField(max_digits=10,decimal_places=6) sensor = models.ForeignKey(''Pyranometer'')


Bueno, tal vez los filtros generados dinámicamente ayuden:

https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter

Además, el administrador tiene una buena consulta de tipo GET como en:

localhost: 8000 / admin / pyranometervalues ​​/? value = 10.0

Podrías especificar la fecha como:

admin / pyranometervalues ​​/? timestamp_ year = 2011 & timestamp _month = 10 & timestamp__day = 13

y así sucesivamente ... Lamentablemente, no conozco una forma más breve de realizar esta consulta en admin. ¿Algunas ideas? :)

EDIT: esto es solo para reducir su consulta, no tiene nada que ver con la paginación;)


Como django-admin es principalmente una cuestión de plantillas (solo es necesario para redefinir plantillas para i18n algunas partes de django-admin-tools), tengo una idea.

Los módulos de paginación son para Django, como linaro-django-pagination o la paginación sin fin, que proporcionan etiquetas de plantilla para paginar cualquier cosa, dado que es iterable.

Si pudiera encontrar la plantilla encargada de mostrar los modelos en línea, podría copiarla en su proyecto, luego intente agregarle un {% load pagination_tags%} y paginar las inlines.

No lo he probado ni lo he pensado muy a fondo, pero, a excepción de la validación, no veo cómo podría fallar. Solo prueba y dinos.


Si alguien requiere esto, encontré esta implementación agradable (aunque descrita como "bastante intrincada") de una subclase de TabularInline paginación en este comentario de un problema de django-suit .

Para Django 1.6 se requiere un cambio de plantilla y una subclase de esta clase PaginationInline :

from django.contrib import admin from django.contrib.admin.views.main import ChangeList from django.core.paginator import EmptyPage, InvalidPage, Paginator class InlineChangeList(object): can_show_all = True multi_page = True get_query_string = ChangeList.__dict__[''get_query_string''] def __init__(self, request, page_num, paginator): self.show_all = ''all'' in request.GET self.page_num = page_num self.paginator = paginator self.result_count = paginator.count self.params = dict(request.GET.items()) class PaginationInline(admin.TabularInline): template = ''admin/edit_inline/tabular_paginated.html'' per_page = 20 def get_formset(self, request, obj=None, **kwargs): formset_class = super(PaginationInline, self).get_formset( request, obj, **kwargs) class PaginationFormSet(formset_class): def __init__(self, *args, **kwargs): super(PaginationFormSet, self).__init__(*args, **kwargs) qs = self.queryset paginator = Paginator(qs, self.per_page) try: page_num = int(request.GET.get(''p'', ''0'')) except ValueError: page_num = 0 try: page = paginator.page(page_num + 1) except (EmptyPage, InvalidPage): page = paginator.page(paginator.num_pages) self.cl = InlineChangeList(request, page_num, paginator) self.paginator = paginator if self.cl.show_all: self._queryset = qs else: self._queryset = page.object_list PaginationFormSet.per_page = self.per_page return PaginationFormSet