Skip to main content

Helpers to extend Django Admin with data from external service with minimal hacks

Project description

django-admin-data-from-external-service

Helpers to extend Django Admin with data from external service with minimal hacks

Live demo with sources on Heroku free quota (please be patient, it will take some time for the app to wake up)

Main features:

  • reuse Django Admin layout to simplify customization of viewing and managing external data (list/view/filter+search/ordering)
  • datasource agnostic
  • django2.x/django3.x/django4.x support

How it works

Used custom ChangeList to determine method to pull external data and mock paginator behaviour.

Example

from django.db import models
from django.contrib import admin

from dadfes.admin import DfesAdminModelMixin


# Declare model for external data (managed: false)
class ExternalUser(models.Model):
    id = models.IntegerField("Id", primary_key=True)
    username = models.TextField("Username")

    class Meta:
        managed = False
        verbose_name = "External User Model"


# 1. mixin DfesAdminModelMixin
class ExternalUserAdmin(DfesAdminModelMixin, admin.ModelAdmin):
    list_display = (
        "id",
        "username",
    )

    # 2. and implement get_list method with returning
    # `{"total": <total number or items>, "items": <list of ExternalUser instances>}`
    def get_list(self, request, page_num, list_per_page):

        # 2.1 pull data from some service, where
        #   search = request.GET.get('q')
        #   order_by = request.GET.get('o')
        #   some_list_filter = request.GET.get('some_list_filter')
        data =  {
            'total': 1,
            'users': [
                {'id': 1, 'username': 'User1'},
            ]
        }

        # 2.2 map data to model instances
        items = [ExternalUser(**i) for i in data.get("users") or []]

        return {
            "total": data.get("total") or 0,
            "items": items,
        }

    # 3. other standart django admin customization
    def get_object(self, request, object_id, *args, **kwargs):
        # 3.1 fetch object from external service
        user = {'id': 1, 'username': 'User1'},
        # 3.2 map data to model instance
        return ExternalUser(**user)

admin.site.register(ExternalUser, ExternalUserAdmin)

License

This project is licensed under

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Built Distribution

File details

Details for the file django_admin_data_from_external_service-0.1.2.tar.gz.

File metadata

File hashes

Hashes for django_admin_data_from_external_service-0.1.2.tar.gz
Algorithm Hash digest
SHA256 c56b11402e3b1a0a43a1365904ef27ddb4e7e196cb027b56cf296f6f4d999cfd
MD5 d4261fcd86830759360acc74a45dc546
BLAKE2b-256 b51c307e08dd5b0f8db104ca63a36d8c14ff06d28183a679c0146ecc14b64719

See more details on using hashes here.

File details

Details for the file django_admin_data_from_external_service-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for django_admin_data_from_external_service-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 973e1c199152274fbf149372f1b24bbe214a958e8b0106f9bf181f7778d6cece
MD5 e4f7d7fd79bb110cdee02b3c157d8eaf
BLAKE2b-256 5fa268bdcf280e48e4d74a2a13e5576dea6796a8ba64d93a5b01ca33987b96e9

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page