diff --git a/frog_api/admin.py b/frog_api/admin.py index 4de3881..37caae7 100644 --- a/frog_api/admin.py +++ b/frog_api/admin.py @@ -1,9 +1,26 @@ from django.contrib import admin +import nested_admin from frog_api.models import Category, Entry, Measure, Project, Version -admin.site.register(Project) -admin.site.register(Version) -admin.site.register(Category) + +class CategoryInline(nested_admin.NestedStackedInline): + model = Category + extra = 0 + + +class VersionInline(nested_admin.NestedStackedInline): + model = Version + inlines = [CategoryInline] + extra = 0 + + +class ProjectAdmin(nested_admin.NestedModelAdmin): + model = Project + inlines = [VersionInline] + extra = 0 + + +admin.site.register(Project, ProjectAdmin) admin.site.register(Entry) admin.site.register(Measure) diff --git a/frogress/settings.py b/frogress/settings.py index a6d8a00..db5b970 100644 --- a/frogress/settings.py +++ b/frogress/settings.py @@ -39,6 +39,7 @@ INSTALLED_APPS = [ "django.contrib.staticfiles", "rest_framework", "frog_api", + "nested_admin", ] MIDDLEWARE = [ diff --git a/poetry.lock b/poetry.lock index 8566f06..70be8cb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -123,6 +123,18 @@ tzdata = {version = "*", markers = "sys_platform == \"win32\""} argon2 = ["argon2-cffi (>=19.1.0)"] bcrypt = ["bcrypt"] +[[package]] +name = "django-nested-admin" +version = "3.4.0" +description = "Django admin classes that allow for nested inlines" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +python-monkey-business = ">=1.0.0" +six = "*" + [[package]] name = "django-stubs" version = "1.12.0" @@ -280,6 +292,17 @@ category = "main" optional = false python-versions = ">=3.6" +[[package]] +name = "python-monkey-business" +version = "1.0.0" +description = "Utility functions for monkey-patching python code" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +six = ">=1.7.0" + [[package]] name = "pytz" version = "2022.2.1" @@ -306,6 +329,14 @@ urllib3 = ">=1.21.1,<1.27" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" + [[package]] name = "sqlparse" version = "0.4.2" @@ -405,7 +436,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "d6d249d7343a25a3c0cb3fe28f04c35d9872709f2e1141dc26210ca8e090bb66" +content-hash = "0dbaf47574a3614ffc93deed76368770fd42f98f9893e82da65b5c106b7d793c" [metadata.files] asgiref = [ @@ -463,6 +494,7 @@ coreschema = [ {file = "coreschema-0.0.4.tar.gz", hash = "sha256:9503506007d482ab0867ba14724b93c18a33b22b6d19fb419ef2d239dd4a1607"}, ] django = [] +django-nested-admin = [] django-stubs = [] django-stubs-ext = [] djangorestframework = [ @@ -598,11 +630,13 @@ psycopg2-binary = [ {file = "psycopg2_binary-2.9.3-cp39-cp39-win32.whl", hash = "sha256:46f0e0a6b5fa5851bbd9ab1bc805eef362d3a230fbdfbc209f4a236d0a7a990d"}, {file = "psycopg2_binary-2.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:accfe7e982411da3178ec690baaceaad3c278652998b2c45828aaac66cd8285f"}, ] +python-monkey-business = [] pytz = [] requests = [ {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, ] +six = [] sqlparse = [ {file = "sqlparse-0.4.2-py3-none-any.whl", hash = "sha256:48719e356bb8b42991bdbb1e8b83223757b93789c00910a616a071910ca4a64d"}, {file = "sqlparse-0.4.2.tar.gz", hash = "sha256:0c00730c74263a94e5a9919ade150dfc3b19c574389985446148402998287dae"}, diff --git a/pyproject.toml b/pyproject.toml index 099dda1..3541ed4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,6 +10,7 @@ python = "^3.8" Django = "^4.1" djangorestframework = "^3.13.1" psycopg2-binary = "^2.9.3" +django-nested-admin = "^3.4.0" [tool.poetry.dev-dependencies] black = "^22.6.0"