Added Person model with ordering_subset and initial data.

master
Brandon Taylor 2014-02-05 09:36:03 -05:00
parent 2ca19f05c1
commit e51f7535ca
7 changed files with 166 additions and 3 deletions

View File

@ -35,7 +35,12 @@ class SortableAdminBase(object):
object_tools block to take people to the view to change the sorting.
"""
if get_is_sortable(self.queryset(request)):
if self.model.ordering_subset() is not None:
objects = self.model.ordering_subset()
else:
objects = self.queryset(request)
if get_is_sortable(objects):
self.change_list_template = \
self.sortable_change_list_with_sort_link_template
self.is_sortable = True
@ -102,6 +107,9 @@ class SortableAdmin(SortableAdminBase, ModelAdmin):
has_perm = request.user.has_perm('{}.{}'.format(opts.app_label,
opts.get_change_permission()))
if self.model.ordering_subset() is not None:
objects = self.model.ordering_subset()
else:
objects = self.queryset(request)
# Determine if we need to regroup objects relative to a

View File

@ -43,6 +43,10 @@ class Sortable(models.Model):
def model_type_id(cls):
return ContentType.objects.get_for_model(cls).id
@classmethod
def ordering_subset(cls):
return None
def __init__(self, *args, **kwargs):
super(Sortable, self).__init__(*args, **kwargs)

View File

@ -4,7 +4,7 @@ from adminsortable.admin import (SortableAdmin, SortableTabularInline,
SortableStackedInline, SortableGenericStackedInline)
from adminsortable.utils import get_is_sortable
from app.models import (Category, Widget, Project, Credit, Note, GenericNote,
Component)
Component, Person)
admin.site.register(Category, SortableAdmin)
@ -58,3 +58,6 @@ class ProjectAdmin(SortableAdmin):
list_display = ['__unicode__', 'category']
admin.site.register(Project, ProjectAdmin)
admin.site.register(Person, SortableAdmin)

View File

@ -0,0 +1,37 @@
[{
"pk": 1,
"model": "app.person",
"fields": {
"first_name": "Bob",
"last_name": "Smith",
"order": 1,
"is_board_member": true
}
}, {
"pk": 2,
"model": "app.person",
"fields": {
"first_name": "Sally",
"last_name": "Sue",
"order": 2,
"is_board_member": false
}
}, {
"pk": 3,
"model": "app.person",
"fields": {
"first_name": "Mike",
"last_name": "Wilson",
"order": 3,
"is_board_member": true
}
}, {
"pk": 4,
"model": "app.person",
"fields": {
"first_name": "Robert",
"last_name": "Roberts",
"order": 2,
"is_board_member": true
}
}]

View File

@ -0,0 +1,95 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'Person'
db.create_table(u'app_person', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('order', self.gf('django.db.models.fields.PositiveIntegerField')(default=1, db_index=True)),
('first_name', self.gf('django.db.models.fields.CharField')(max_length=50)),
('last_name', self.gf('django.db.models.fields.CharField')(max_length=50)),
('is_board_member', self.gf('django.db.models.fields.BooleanField')(default=False)),
))
db.send_create_signal(u'app', ['Person'])
def backwards(self, orm):
# Deleting model 'Person'
db.delete_table(u'app_person')
models = {
u'app.category': {
'Meta': {'ordering': "['order']", 'object_name': 'Category'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1', 'db_index': 'True'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'app.component': {
'Meta': {'ordering': "['order']", 'object_name': 'Component'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1', 'db_index': 'True'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
'widget': ('adminsortable.fields.SortableForeignKey', [], {'to': u"orm['app.Widget']"})
},
u'app.credit': {
'Meta': {'ordering': "['order']", 'object_name': 'Credit'},
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1', 'db_index': 'True'}),
'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['app.Project']"})
},
u'app.genericnote': {
'Meta': {'ordering': "['order']", 'object_name': 'GenericNote'},
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'generic_notes'", 'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1', 'db_index': 'True'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'app.note': {
'Meta': {'ordering': "['order']", 'object_name': 'Note'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1', 'db_index': 'True'}),
'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['app.Project']"}),
'text': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
u'app.person': {
'Meta': {'ordering': "['order']", 'object_name': 'Person'},
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_board_member': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1', 'db_index': 'True'})
},
u'app.project': {
'Meta': {'ordering': "['order']", 'object_name': 'Project'},
'category': ('adminsortable.fields.SortableForeignKey', [], {'to': u"orm['app.Category']"}),
'description': ('django.db.models.fields.TextField', [], {}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1', 'db_index': 'True'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'app.widget': {
'Meta': {'ordering': "['order']", 'object_name': 'Widget'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1', 'db_index': 'True'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
}
}
complete_apps = ['app']

View File

@ -95,3 +95,19 @@ class Component(SimpleModel, Sortable):
def __unicode__(self):
return self.title
class Person(Sortable):
class Meta(Sortable.Meta):
verbose_name_plural = 'People'
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
is_board_member = models.BooleanField(default=False)
def __unicode__(self):
return '{} {}'.format(self.first_name, self.last_name)
@classmethod
def ordering_subset(cls):
return cls.objects.filter(is_board_member=True)