Added model with custom order field and inline model with custom order field example.

master
Brandon Taylor 2015-08-24 08:04:05 -04:00
parent 43fef78876
commit 64b8b9dc39
6 changed files with 290 additions and 1 deletions

View File

@ -6,7 +6,8 @@ from adminsortable.admin import (SortableAdmin, SortableTabularInline,
from adminsortable.utils import get_is_sortable from adminsortable.utils import get_is_sortable
from app.models import (Category, Widget, Project, Credit, Note, GenericNote, from app.models import (Category, Widget, Project, Credit, Note, GenericNote,
Component, Person, NonSortableCategory, SortableCategoryWidget, Component, Person, NonSortableCategory, SortableCategoryWidget,
SortableNonInlineCategory, NonSortableCredit, NonSortableNote) SortableNonInlineCategory, NonSortableCredit, NonSortableNote,
CustomWidget, CustomWidgetComponent)
admin.site.register(Category, SortableAdmin) admin.site.register(Category, SortableAdmin)
@ -93,4 +94,14 @@ class NonSortableCategoryAdmin(NonSortableParentAdmin):
admin.site.register(NonSortableCategory, NonSortableCategoryAdmin) admin.site.register(NonSortableCategory, NonSortableCategoryAdmin)
class CustomWidgetComponentInline(SortableStackedInline):
model = CustomWidgetComponent
extra = 0
class CustomWidgetAdmin(SortableAdmin):
inlines = [CustomWidgetComponentInline]
admin.site.register(SortableNonInlineCategory, SortableAdmin) admin.site.register(SortableNonInlineCategory, SortableAdmin)
admin.site.register(CustomWidget, CustomWidgetAdmin)

View File

@ -0,0 +1,203 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import adminsortable.fields
class Migration(migrations.Migration):
dependencies = [
('contenttypes', '0002_remove_content_type_name'),
]
operations = [
migrations.CreateModel(
name='Category',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('title', models.CharField(max_length=50)),
('order', models.PositiveIntegerField(default=0, editable=False)),
],
options={
'ordering': ['order'],
'verbose_name_plural': 'Categories',
},
),
migrations.CreateModel(
name='Component',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('title', models.CharField(max_length=50)),
('order', models.PositiveIntegerField(default=0, editable=False)),
],
options={
'ordering': ['order'],
},
),
migrations.CreateModel(
name='Credit',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('first_name', models.CharField(max_length=30)),
('last_name', models.CharField(max_length=30)),
('order', models.PositiveIntegerField(default=0, editable=False)),
],
options={
'ordering': ['order'],
},
),
migrations.CreateModel(
name='GenericNote',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('title', models.CharField(max_length=50)),
('object_id', models.PositiveIntegerField(verbose_name='Content id')),
('order', models.PositiveIntegerField(default=0, editable=False)),
('content_type', models.ForeignKey(related_name='generic_notes', verbose_name='Content type', to='contenttypes.ContentType')),
],
options={
'ordering': ['order'],
},
),
migrations.CreateModel(
name='NonSortableCategory',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('title', models.CharField(max_length=50)),
],
options={
'abstract': False,
'verbose_name': 'Non-Sortable Category',
'verbose_name_plural': 'Non-Sortable Categories',
},
),
migrations.CreateModel(
name='NonSortableCredit',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('first_name', models.CharField(max_length=30)),
('last_name', models.CharField(max_length=30)),
],
),
migrations.CreateModel(
name='NonSortableNote',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('text', models.CharField(max_length=100)),
],
),
migrations.CreateModel(
name='Note',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('text', models.CharField(max_length=100)),
('order', models.PositiveIntegerField(default=0, editable=False)),
],
options={
'ordering': ['order'],
},
),
migrations.CreateModel(
name='Person',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('first_name', models.CharField(max_length=50)),
('last_name', models.CharField(max_length=50)),
('is_board_member', models.BooleanField(default=False, verbose_name=b'Board Member')),
('order', models.PositiveIntegerField(default=0, editable=False)),
],
options={
'ordering': ['order'],
'verbose_name_plural': 'People',
},
),
migrations.CreateModel(
name='Project',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('title', models.CharField(max_length=50)),
('description', models.TextField()),
('order', models.PositiveIntegerField(default=0, editable=False)),
('category', adminsortable.fields.SortableForeignKey(to='app.Category')),
],
options={
'ordering': ['order'],
},
),
migrations.CreateModel(
name='SortableCategoryWidget',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('title', models.CharField(max_length=50)),
('order', models.PositiveIntegerField(default=0, editable=False)),
('non_sortable_category', adminsortable.fields.SortableForeignKey(to='app.NonSortableCategory')),
],
options={
'ordering': ['order'],
'verbose_name': 'Sortable Category Widget',
'verbose_name_plural': 'Sortable Category Widgets',
},
),
migrations.CreateModel(
name='SortableNonInlineCategory',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('title', models.CharField(max_length=50)),
('order', models.PositiveIntegerField(default=0, editable=False)),
('non_sortable_category', adminsortable.fields.SortableForeignKey(to='app.NonSortableCategory')),
],
options={
'ordering': ['order'],
'verbose_name': 'Sortable Non-Inline Category',
'verbose_name_plural': 'Sortable Non-Inline Categories',
},
),
migrations.CreateModel(
name='Widget',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('title', models.CharField(max_length=50)),
('order', models.PositiveIntegerField(default=0, editable=False)),
],
options={
'ordering': ['order'],
},
),
migrations.CreateModel(
name='CustomWidget',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('title', models.CharField(max_length=50)),
('custom_order_field', models.PositiveIntegerField(default=0, editable=False)),
],
options={
'ordering': ['custom_order_field'], 'verbose_name': 'Custom Widget', 'verbose_name_plural': 'Custom Widgets'
},
),
migrations.AddField(
model_name='note',
name='project',
field=models.ForeignKey(to='app.Project'),
),
migrations.AddField(
model_name='nonsortablenote',
name='project',
field=models.ForeignKey(to='app.Project'),
),
migrations.AddField(
model_name='nonsortablecredit',
name='project',
field=models.ForeignKey(to='app.Project'),
),
migrations.AddField(
model_name='credit',
name='project',
field=models.ForeignKey(to='app.Project'),
),
migrations.AddField(
model_name='component',
name='widget',
field=adminsortable.fields.SortableForeignKey(to='app.Widget'),
),
]

View File

@ -0,0 +1,37 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('app', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='CustomWidgetComponent',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('title', models.CharField(max_length=50)),
('widget_order', models.PositiveIntegerField(default=0, editable=False, db_index=True)),
],
options={
'ordering': ['widget_order'],
'verbose_name': 'Custom Widget Component',
'verbose_name_plural': 'Custom Widget Components',
},
),
migrations.AlterField(
model_name='customwidget',
name='custom_order_field',
field=models.PositiveIntegerField(default=0, editable=False, db_index=True),
),
migrations.AddField(
model_name='customwidgetcomponent',
name='custom_widget',
field=models.ForeignKey(to='app.CustomWidget'),
),
]

View File

@ -202,3 +202,41 @@ class SortableNonInlineCategory(SimpleModel, SortableMixin):
def __str__(self): def __str__(self):
return self.title return self.title
@python_2_unicode_compatible
class CustomWidget(SortableMixin, SimpleModel):
# custom field for ordering
custom_order_field = models.PositiveIntegerField(default=0, db_index=True,
editable=False)
order_field_name = 'custom_order_field'
class Meta:
ordering = ['custom_order_field']
verbose_name = 'Custom Widget'
verbose_name_plural = 'Custom Widgets'
def __str__(self):
return self.title
@python_2_unicode_compatible
class CustomWidgetComponent(SortableMixin, SimpleModel):
custom_widget = models.ForeignKey(CustomWidget)
# custom field for ordering
widget_order = models.PositiveIntegerField(default=0, db_index=True,
editable=False)
order_field_name = 'widget_order'
class Meta:
ordering = ['widget_order']
verbose_name = 'Custom Widget Component'
verbose_name_plural = 'Custom Widget Components'
def __str__(self):
return self.title