from __future__ import unicode_literals
from django.db import models
from django.db.models import ForeignKey, CASCADE
from nested_admin.tests.compat import python_2_unicode_compatible
[docs]@python_2_unicode_compatible
class GroupAbstract(models.Model):
slug = models.CharField(max_length=128)
def __str__(self):
return self.slug
[docs]@python_2_unicode_compatible
class SectionAbstract(models.Model):
slug = models.CharField(max_length=128)
position = models.PositiveIntegerField()
def __str__(self):
parts = ["%s[%d]" % (self.slug, self.position)]
if self.group:
parts.insert(0, "%s" % self.group)
return "/".join(parts)
[docs]@python_2_unicode_compatible
class ItemAbstract(models.Model):
name = models.CharField(max_length=128)
position = models.PositiveIntegerField()
def __str__(self):
parts = ["%s[%d]" % (self.name, self.position)]
if self.section:
parts.insert(0, "%s" % self.section)
return "/".join(parts)
[docs]class StackedGroup(GroupAbstract):
pass
[docs]class StackedSection(SectionAbstract):
group = ForeignKey(StackedGroup, related_name='section_set', on_delete=CASCADE)
class Meta:
ordering = ('group', 'position')
[docs]class StackedItem(ItemAbstract):
section = ForeignKey(StackedSection, related_name='item_set', on_delete=CASCADE)
upload = models.FileField(blank=True, null=True, upload_to='foo')
class Meta:
ordering = ('section', 'position')
[docs]class TabularGroup(GroupAbstract):
pass
[docs]class TabularSection(SectionAbstract):
group = ForeignKey(TabularGroup, related_name='section_set', on_delete=CASCADE)
class Meta:
ordering = ('group', 'position')
[docs]class TabularItem(ItemAbstract):
section = ForeignKey(TabularSection, related_name='item_set', on_delete=CASCADE)
class Meta:
ordering = ('section', 'position')