From 588fc7a4cd3784a228b8ddb1e76b17afa39befc0 Mon Sep 17 00:00:00 2001 From: Brandon Taylor Date: Sun, 21 Sep 2014 18:45:46 -0400 Subject: [PATCH] Added new models and model admins to Python3 sample project. --- python3_sample_project/app/admin.py | 16 ++++++- ...sortablecategory_sortablecategorywidget.py | 44 ++++++++++++++++++ python3_sample_project/app/models.py | 20 ++++++++ .../database/python3-test-project.sqlite3 | Bin 64512 -> 74752 bytes 4 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 python3_sample_project/app/migrations/0002_nonsortablecategory_sortablecategorywidget.py diff --git a/python3_sample_project/app/admin.py b/python3_sample_project/app/admin.py index 25783b3..f60797d 100644 --- a/python3_sample_project/app/admin.py +++ b/python3_sample_project/app/admin.py @@ -1,10 +1,11 @@ from django.contrib import admin from adminsortable.admin import (SortableAdmin, SortableTabularInline, - SortableStackedInline, SortableGenericStackedInline) + SortableStackedInline, SortableGenericStackedInline, + NonSortableParentAdmin) from adminsortable.utils import get_is_sortable from app.models import (Category, Widget, Project, Credit, Note, GenericNote, - Component, Person) + Component, Person, NonSortableCategory, SortableCategoryWidget) admin.site.register(Category, SortableAdmin) @@ -65,3 +66,14 @@ class PersonAdmin(SortableAdmin): list_display = ['__str__', 'is_board_member'] admin.site.register(Person, PersonAdmin) + + +class SortableCategoryWidgetInline(SortableStackedInline): + model = SortableCategoryWidget + extra = 0 + + +class NonSortableCategoryAdmin(NonSortableParentAdmin): + inlines = [SortableCategoryWidgetInline] + +admin.site.register(NonSortableCategory, NonSortableCategoryAdmin) diff --git a/python3_sample_project/app/migrations/0002_nonsortablecategory_sortablecategorywidget.py b/python3_sample_project/app/migrations/0002_nonsortablecategory_sortablecategorywidget.py new file mode 100644 index 0000000..53db365 --- /dev/null +++ b/python3_sample_project/app/migrations/0002_nonsortablecategory_sortablecategorywidget.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import adminsortable.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('app', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='NonSortableCategory', + fields=[ + ('id', models.AutoField(serialize=False, auto_created=True, verbose_name='ID', primary_key=True)), + ('title', models.CharField(max_length=50)), + ], + options={ + 'verbose_name': 'Non-Sortable Category', + 'verbose_name_plural': 'Non-Sortable Categories', + 'abstract': False, + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='SortableCategoryWidget', + fields=[ + ('id', models.AutoField(serialize=False, auto_created=True, verbose_name='ID', primary_key=True)), + ('order', models.PositiveIntegerField(db_index=True, editable=False, default=1)), + ('title', models.CharField(max_length=50)), + ('non_sortable_category', adminsortable.fields.SortableForeignKey(to='app.NonSortableCategory')), + ], + options={ + 'ordering': ['order'], + 'verbose_name': 'Sortable Category Widget', + 'abstract': False, + 'verbose_name_plural': 'Sortable Category Widgets', + }, + bases=(models.Model,), + ), + ] diff --git a/python3_sample_project/app/models.py b/python3_sample_project/app/models.py index 9fe5a0b..a0b72bc 100644 --- a/python3_sample_project/app/models.py +++ b/python3_sample_project/app/models.py @@ -119,3 +119,23 @@ class Person(Sortable): def __str__(self): return '{0} {1}'.format(self.first_name, self.last_name) + + +class NonSortableCategory(SimpleModel): + class Meta(SimpleModel.Meta): + verbose_name = 'Non-Sortable Category' + verbose_name_plural = 'Non-Sortable Categories' + + def __str__(self): + return self.title + + +class SortableCategoryWidget(SimpleModel, Sortable): + class Meta(Sortable.Meta): + verbose_name = 'Sortable Category Widget' + verbose_name_plural = 'Sortable Category Widgets' + + non_sortable_category = SortableForeignKey(NonSortableCategory) + + def __str__(self): + return self.title diff --git a/python3_sample_project/database/python3-test-project.sqlite3 b/python3_sample_project/database/python3-test-project.sqlite3 index 76b853c51bbcb769c2028d06b594c08f5738eb54..7435915f7d907899ebc93da37a490432bd89126d 100644 GIT binary patch delta 4063 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 M{OB#KtFxQgfA&(f3IG5A