it/itf/insidepages/models.py

100 lines
4.2 KiB
Python
Raw Permalink Normal View History

2011-08-22 22:04:40 +00:00
from django.db import models
from django.contrib.contenttypes.models import ContentType
class Module(models.Model):
2011-09-06 02:57:15 +00:00
title = models.CharField(max_length=255, help_text="Title of Module. eg. Best Practices")
slug = models.SlugField(help_text="short name of module to be used for url. eg. bestpractices")
2011-09-28 16:48:29 +00:00
about = models.TextField(blank=True)
2011-08-22 22:04:40 +00:00
def __unicode__(self):
return self.title
def get_absolute_url(self):
return "/m/" + self.slug
class ModuleTab(models.Model):
module = models.ForeignKey(Module)
2011-09-06 02:57:15 +00:00
title = models.CharField(max_length=64, help_text="Display title for tab")
slug = models.SlugField(help_text="short name for tab, to be used in url, eg. faq")
2011-10-23 23:09:55 +00:00
text = models.TextField(help_text="text to show up in LHS for tab", blank=True)
2011-09-06 02:57:15 +00:00
model = models.ForeignKey("ModelExtra", help_text="Database model object tab is linked to (chose from list or ask for one to be created.)")
is_default = models.BooleanField(default=False, help_text="Whether this should be the default displayed tab.")
order = models.IntegerField(default=1, help_text="Make number higher to send it lower in order (default will always show first)")
is_displayed = models.BooleanField(default=True, help_text="Uncheck to hide tab")
2011-08-22 22:04:40 +00:00
2011-08-25 09:39:15 +00:00
class Meta:
ordering = ['-is_default', 'order']
2011-08-22 22:04:40 +00:00
def __unicode__(self):
return self.title
def model_class(self):
return self.model.model.model_class()
2011-09-10 01:40:47 +00:00
def get_absolute_url(self): #FIXME!!
return "/m/%s/?tab=%s" % (self.module.slug, self.slug,)
2011-09-10 01:40:47 +00:00
2011-08-22 22:04:40 +00:00
def get_list(self, options):
return self.model_class().get_list(options)
2011-09-10 01:40:47 +00:00
def get_dict(self):
if self.model.has_list:
page = self.get_list({})
else:
page = None
2011-09-10 01:40:47 +00:00
return {
'id': self.id,
'slug': self.slug,
'title': self.title,
'text': self.text,
'has_list': self.model.has_list,
'page': self.get_list({}),
2011-09-10 01:40:47 +00:00
'sorts': [s.get_dict() for s in self.model.modelsort_set.all()]
}
class ModelExtra(models.Model):
2011-09-06 02:57:15 +00:00
model = models.ForeignKey(ContentType, help_text="Chose from the list of death at your own peril.")
friendly_name = models.CharField(max_length=128, help_text="Used as display name in Admin, never to user. eg. Best Practices FAQ")
has_comments = models.BooleanField(default=False, help_text="Will there be comments attached to this?")
buttons = models.ManyToManyField('ModelButton', through='ModelExtraButton', blank=True)
2011-09-06 03:06:14 +00:00
has_list = models.BooleanField(default=True, help_text="Is there an LHS listing for this?")
default_image = models.ImageField(upload_to='upload/images/model_defaults/', max_length=255, blank=True, help_text="Default image to show if, either, item has no image, or image to display if model does not have LHS list.")
def __unicode__(self):
return self.friendly_name
2011-12-27 09:18:37 +00:00
class ModelSort(models.Model):
model = models.ForeignKey(ModelExtra)
2011-09-06 02:57:15 +00:00
operator = models.CharField(max_length=1, help_text="This should be either + or -.")
field_name = models.CharField(max_length=64, help_text="Name of field on which sorting should take place, eg. title")
friendly_name = models.CharField(max_length=128, help_text="And now, what shall we call it for the user? eg. By Title (A-Z)")
def __unicode__(self):
return self.friendly_name
2011-09-10 01:40:47 +00:00
def get_dict(self):
return {
'operator': self.operator,
'field_name': self.field_name,
'friendly_name': self.friendly_name
}
class ModelButton(models.Model):
2011-09-06 02:57:15 +00:00
name = models.CharField(max_length=64, help_text="Name of button, eg. Download")
icon = models.ImageField(upload_to='upload/images/button_icons/', blank=True, help_text="pretty icon for the button")
template = models.TextField(blank=True, help_text="you should never need to edit this field. please don't.")
def __unicode__(self):
return self.name
class ModelExtraButton(models.Model):
modelextra = models.ForeignKey(ModelExtra)
modelbutton = models.ForeignKey(ModelButton)
2011-09-06 02:57:15 +00:00
parameters = models.CharField(max_length=64, blank=True, help_text="if the button needs a parameter, give it here, if you dont know what this is, leave it blank.")
2011-08-22 22:04:40 +00:00