From 279477da7ba1dbdf84e85d6d2f63910f88bf4b5e Mon Sep 17 00:00:00 2001 From: intelliadmin Date: Fri, 15 Mar 2013 10:10:01 +0100 Subject: [PATCH] added generic inlines support --- adminsortable/admin.py | 12 ++++++++++++ sample_project/app/admin.py | 11 ++++++++--- sample_project/app/models.py | 15 +++++++++++++++ sample_project/database/test_project.sqlite | Bin 51200 -> 54272 bytes sample_project/manage.py | 3 +++ 5 files changed, 38 insertions(+), 3 deletions(-) diff --git a/adminsortable/admin.py b/adminsortable/admin.py index 6ba6c4e..937b286 100644 --- a/adminsortable/admin.py +++ b/adminsortable/admin.py @@ -1,6 +1,8 @@ import json from django import VERSION as DJANGO_VERSION +from django.contrib.contenttypes.generic import GenericStackedInline, GenericTabularInline + DJANGO_MINOR_VERSION = DJANGO_VERSION[1] from django.conf import settings @@ -238,3 +240,13 @@ class SortableTabularInline(SortableInlineBase, TabularInline): class SortableStackedInline(SortableInlineBase, StackedInline): """Custom template that enables sorting for stacked inlines""" template = 'adminsortable/edit_inline/stacked.html' + + +class SortableGenericTabularInline(SortableInlineBase, GenericTabularInline): + """Custom template that enables sorting for tabular inlines""" + template = 'adminsortable/edit_inline/tabular.html' + + +class SortableGenericStackedInline(SortableInlineBase, GenericStackedInline): + """Custom template that enables sorting for stacked inlines""" + template = 'adminsortable/edit_inline/stacked.html' diff --git a/sample_project/app/admin.py b/sample_project/app/admin.py index b4abba5..4975ae0 100644 --- a/sample_project/app/admin.py +++ b/sample_project/app/admin.py @@ -1,8 +1,8 @@ from django.contrib import admin from adminsortable.admin import (SortableAdmin, SortableTabularInline, - SortableStackedInline) -from app.models import Category, Project, Credit, Note + SortableStackedInline, SortableGenericStackedInline) +from app.models import Category, Project, Credit, Note, GenericNote admin.site.register(Category, SortableAdmin) @@ -17,8 +17,13 @@ class NoteInline(SortableStackedInline): extra = 0 +class GenericNoteInline(SortableGenericStackedInline): + model = GenericNote + extra = 0 + + class ProjectAdmin(SortableAdmin): - inlines = [CreditInline, NoteInline] + inlines = [CreditInline, NoteInline, GenericNoteInline] list_display = ['__unicode__', 'category'] admin.site.register(Project, ProjectAdmin) diff --git a/sample_project/app/models.py b/sample_project/app/models.py index ec31108..a1ea4f1 100644 --- a/sample_project/app/models.py +++ b/sample_project/app/models.py @@ -1,3 +1,5 @@ +from django.contrib.contenttypes import generic +from django.contrib.contenttypes.models import ContentType from django.db import models from adminsortable.fields import SortableForeignKey @@ -58,3 +60,16 @@ class Note(Sortable): def __unicode__(self): return self.text + + +#a generic bound model +class GenericNote(SimpleModel, Sortable): + content_type = models.ForeignKey(ContentType, verbose_name=u"Content type", related_name="generic_notes") + object_id = models.PositiveIntegerField(u"Content id") + content_object = generic.GenericForeignKey(ct_field='content_type', fk_field='object_id') + + class Meta(Sortable.Meta): + pass + + def __unicode__(self): + return u"%s : %s" % (self.title, self.content_object) \ No newline at end of file diff --git a/sample_project/database/test_project.sqlite b/sample_project/database/test_project.sqlite index f7fe8217b396220f35437b5645d73d963cfffac2..f8720d70e4f4c206f6e19f51fa17546661a66cb7 100644 GIT binary patch delta 2284 zcmah~ZERCj7(VB`w`=d{fbIj>2XgH?*w$_I_O@#`BU-k}80+T7%w!=hx9u5hZ0)R# zZXhW|{6Zou_lH4={2&2?#@Jndh{;qW@Iy32g8@VqnKOtWA_xW~(R164bQ?&Mo;L6M zyytn(eV_B(ExTaLd$23tbOIsdWZ%h;d8ka%oj~PdmUv(@;6il_%p6#-sOSwfY1oe& zus9SuU%!CEA~ptSFOAU7bu>uB-Tq)GLM_RJf4v-BHziS+!(l5n%7H*C+^i1r^%W+k zU~^YHrE1Y#VY9jIl3o4IWj7QU$uR`y;cGYqJ0T3ufCrYq9CC|XAjjgd{p8_AMja~3 zDxBaKvY^L;KdK>Q?K+jH&_rV>Y}13%W}XcbyapzUzg-_y6gcl z;HI+da*JY`dbYX5Fpo!95Dc@2_XNx(XGkN-!EtnDD0Z?a_Bfx8JUpILj<+td+eE3{ zCY6h9l2z3=GAgve=ikQBsC*6v6%^Wp<0-TKN$}7P=7=a z%@smTLPY@~(j8$HU7@h>;H|_NTSc|Kd2ygBUYyb38^H~%GHKE^{1$Xo5#aR1b5(X zxCXz&ukbUB!WlTpNIr#h4tUIKi$NKEbuoh;NAM5afIr|O1D=CZ@GTr?&^Q>iZh1bj z8kAFSlxD#92;d-sFW?~j#xQ$;WE17^&a6Cp7UmFdZKKacgc>&K6n={!%?QS?Jy9JHNw1XoQ5!;pUW)|%fUb>*d`D5hQi9gTb3wX&LmoL zelDz{;c#~{WzuP}oLtf%Z=e$)E)DSv)=GmxIT>Qq*;=J;wH%h$Cu5nA+$}Yh!GJn+ z0HFi;C>aJbygBKSXlVNm_2u20h~oWhba>B)PynY;4(6AT3Hc;6odr79%@R<)+FOi? zdVQ~n%bP{o5uApPU>Ed2Efhl<87GIxYot9Mt0K{*79Dy7i#2jkNIL5j;oZY+mlobF zNILG+f|)K{V%8xiwrUK_iKn9F*;Bn)9pAqYXTS|M*-HrigiCOnP4*nj*5*zK0MBcW zNWJy`TtkK?lG`v2f3f3@GS~=|!#L7$8a7R@t@<<$n7$IlI!$JYzdFzYK!!izxJ*4N zMJSGQ@hkWj(g52~>5wNo8skd!^B=Y1Sb29aKnIv>r@lctsl(y2`71T!PmMckTI)P* zb;8P~+PbF&^R(>UDznhsG$U&kip~B|FhYZo&Iklqw$iCj`ywixJi8k6i%Ny%v5GjXuw=0`pDpU@%E>J4024$@^Lpk1BuFQQWH=16u zu_Sr$+{T|>QOJUuNSBxw zXwy%OQvLS`=8PJcz!3yva6~ojcpEy#&?4-@{N$CGV)x=g?e^X;Yv&8t&F5MAUaty~ iAO7GPJp5y^&2rMbdppj7BSSXhv| zTp}SsL8u_8uJcerA}L9PPl1@2VrE!IDVc>O*j!f$2j(#MoR4$QnQ489RzLg>wTBSm zlzVIK4IIcZ^^k+J$$HH-&;&7yM2-a7tXZrjx-XN8X5~nRniZdwlkd#S&vj-vvvcJV zZx1=GyF%GK!3T_@A06=G42qC~9c)#zwcgSFc}&a~$I*~b6cSuT9V&#a)PaCMS}QDj z6~dTGn2HuUqWd1xaC&?z6Ct!T;42eq`7#Y*s3)k$B%bNMYH0P9uRFA|;vmt^ZnYdS|yc4t_P~_ly zP(-z*^4(&lC5cB^Fio(A-}r%V_>7O3mZPtsP2bojwQ+*KSivH`NM#D+QhNz){MP<3 z86FrU7{nMBB;AEfjFIU7oi_IfV_xkzdzisFbV_PRVZ4W1ym(S^1V+Qxd}-_}6CT}#D-&MU01>oH=b zl(tQlACWN0G$~Ab)168omb+CRWo2^&@9-3U)S?urFta(`H_F7^{Wu!Dxg{d6bqRlD z(r9AL-EOciOJ|E>rE(fLpshP^~52o7VIfW8opP0U*N|e=@?%Kn*1ut}vW7 KJjMDj<^KToJk^o_ diff --git a/sample_project/manage.py b/sample_project/manage.py index 9c651f3..007cd0d 100644 --- a/sample_project/manage.py +++ b/sample_project/manage.py @@ -2,6 +2,9 @@ import os import sys +# Adds the adminsortable package from the cloned repository instead of site_packages +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sample_project.settings")