class Photo(models.Model): album = models.ForeignKey(Album, related_name='photos') name = models.CharField(max_length=50) position = PositionField(collection='album', default=0) def __unicode__(self): return self.name
class Subscription(Trashable): """ A user's (:model:`django.contrib.auth.User`) subscription of a certain List (:model:`ideaList.List`) """ user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='subscriptions') list = models.ForeignKey(List, on_delete=models.CASCADE, related_name='subscriptions') position = PositionField(collection='user', default=-1) class Meta: ordering = ['position'] unique_together = (('user', 'list'), ) def as_dict(self, lst=None): if lst is None: lst = self.list.as_dict() return { 'id': self.id, 'user_id': self.user_id, 'list': lst, 'position': self.position } def __unicode__(self): val = self.user.first_name + ": " + self.list.name if self.trashed_at: val += " (trashed)" return val
class Task(models.Model): """ Base class for lessons/exercises - ordered items within a sub-unit """ sub_unit = models.ForeignKey(SubUnit) title = models.CharField(max_length=100) position = PositionField(collection='sub_unit', parent_link='task_ptr')
class Item(models.Model): list = models.ForeignKey('list', related_name='items', db_index=True) name = models.CharField(max_length=50) position = PositionField(unique_for_field='list') def __unicode__(self): return self.name
class QueueItem(models.Model): objects = QueueItemQuerySet().as_manager() banner = models.ForeignKey('banners.Banner', on_delete=models.CASCADE, related_name='queue') phone_number = models.CharField(_('phone'), validators=[phone_regex_validator], max_length=17) status = enum.EnumField(QueueItemStatus, default=QueueItemStatus.QUEUED) source = enum.EnumField(QueueItemSource, default=QueueItemSource.TWILIO) telegram_chat_id = models.BigIntegerField( null=True, blank=True, validators=[MinValueValidator(0)]) past = models.BooleanField(null=False, default=False) position = PositionField(collection=('banner', 'past')) processing_started_at = models.DateTimeField(null=True, blank=True) processing_ended_at = models.DateTimeField(null=True, blank=True) waiting_time_estimation = models.DurationField(null=True, blank=True) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Meta: ordering = ('position', ) base_manager_name = 'objects' def __str__(self): return self.phone_number
class Node(models.Model): parent = models.ForeignKey('self', related_name='children', blank=True, null=True) name = models.CharField(max_length=50) position = PositionField(collection='parent') def __unicode__(self): return self.name
class Ingredient(models.Model): amount = models.FloatField(null=True, blank=True, verbose_name=_('Ingredient|amount')) unit = models.ForeignKey(Unit, null=True, blank=True) recipe = models.ForeignKey(Recipe) food = models.ForeignKey(Food) order_index = PositionField(blank=True, null=True, unique_for_field="direction") direction = models.ForeignKey(Direction, related_name='ingredients', null=True, blank=True) def __init__(self, *args, **kwargs): super(Ingredient, self).__init__(*args, **kwargs) def formatted_food(self): if self.food.name_plural != None and self.food.name_plural != '' and ( self.amount != 1): food_str = self.food.name_plural else: food_str = self.food.name return food_str def __str__(self): return self.formatted_food() class Meta: ordering = ["direction", "order_index", "id"] verbose_name = _('Ingredient') verbose_name_plural = _('Ingredients')
class Item(models.Model): list = models.ForeignKey('list', related_name='items', db_index=True, on_delete=models.CASCADE) name = models.CharField(max_length=50) position = PositionField(collection='list') updated = models.DateTimeField(auto_now=True) def __unicode__(self): return self.name
class MigrationTest(models.Model): name = models.CharField(max_length=80) age = models.IntegerField(null=True, blank=True) favorite_color = models.CharField(max_length=255, null=True, blank=True) position = PositionField(collection=('name', 'age')) def __unicode__(self): return self.name
class GenericThing(models.Model): name = models.CharField(max_length=80) object_id = models.PositiveIntegerField() content_type = models.ForeignKey(ContentType) content_object = generic.GenericForeignKey() position = PositionField(collection=('object_id', 'content_type')) def __unicode__(self): return self.name
class UserDashlet(models.Model): """ One dashlet for one user """ user_dashboard = models.ForeignKey(UserDashboard) dashlet_name = models.CharField(max_length=255) position = PositionField(collection='user_dashboard') deleted = models.BooleanField(default=False) class Meta: ordering = ('position',)
class ProductCategory(models.Model): product = models.ForeignKey(Product) category = models.ForeignKey(Category) position = PositionField(collection='category') class Meta(object): unique_together = ('product', 'category') def __unicode__(self): return u"%s in %s" % (self.product, self.category)
class Ingredient(models.Model): text = models.CharField(max_length=100, blank=False) recipe = models.ForeignKey(Recipe, related_name='ingredients') position = PositionField(collection='recipe') class Meta: ordering = ['position'] def __str__(self): return self.text
class RelationArticleSite(models.Model): child = models.ForeignKey('cms.Article') parent = models.ForeignKey('cms.Site') position = PositionField(collection='parent') main = models.BooleanField(default=False) class Meta: app_label = 'cms' ordering = ['-id'] unique_together = ("child", "parent")
class Request(models.Model): request_body = models.TextField() position = PositionField() class Meta: ordering = ( '-id', 'position', )
class Slide(models.Model): name = models.CharField(max_length=200, verbose_name=_("name")) image = models.ImageField(upload_to="slideshow", verbose_name=_("image")) link = models.URLField() text = models.TextField(verbose_name=_("text")) position = PositionField() created = models.DateTimeField(null=True, blank=True, auto_now_add=True) modified = models.DateTimeField(null=True, blank=True, auto_now=True) class Meta: ordering = ('position', '-created', '-modified')
class Attachment(models.Model): content_type = models.ForeignKey('contenttypes.ContentType', on_delete=models.CASCADE) object_id = models.CharField(max_length=128) content_object = GenericForeignKey('content_type', 'object_id') field_name = models.CharField(max_length=256, null=True, blank=True) file_obj = models.FileField(_("file"), upload_to=upload_path) original_filename = models.CharField(_("original filename"), max_length=255, blank=True, null=True) # for internal use... owner = models.ForeignKey( getattr(settings, 'AUTH_USER_MODEL', 'auth.User'), related_name='owned_%(class)ss', on_delete=models.SET_NULL, null=True, blank=True, verbose_name=_('owner'), ) uuid = models.UUIDField() position = PositionField(_("order"), default=-1, collection=('object_id', 'content_type')) timestamp = models.DateTimeField(default=timezone.now) objects = AttachmentManager() class Meta: verbose_name = _('attachment') verbose_name_plural = _('attachments') unique_together = ['content_type', 'object_id', 'uuid'] ordering = ['-timestamp', 'position'] def __str__(self): if self.original_filename: return self.original_filename return str(self.file_obj.name) def get_absolute_url(self): return self.file_obj.url def as_file(self): class AttachmentFile(File): uuid = str(self.uuid) return AttachmentFile(self.file_obj, self.original_filename) def delete(self, *args, **kwargs): if self.file_obj and self.file_obj.storage.exists(self.file_obj.name): self.file_obj.delete() super(Attachment, self).delete(*args, **kwargs)
class Plaque(Trashable): """ Model for testing interaction of Trashable and PositionField """ text = models.CharField(max_length=200) user = models.ForeignKey(User) position = PositionField(collection='user') class Meta: ordering = ['position'] def __unicode__(self): return self.text
class Step(models.Model): text = models.TextField(blank=False) image = models.ImageField(upload_to="images/recipe/", null=True, blank=True) recipe = models.ForeignKey(Recipe, related_name='steps') position = PositionField(collection='recipe') class Meta: ordering = ['position'] def __str__(self): return "(%s) %s" % (self.position, self.text)
class Answer(AnswerAbstract): question = models.ForeignKey(Question) order = PositionField(collection="question") class Meta: ordering = ('order', ) @property def letter(self): if self.question.type == "True/False": return self.answer[0] else: return chr(self.order + 65)
class Category(CommonAbstractModel): title = models.CharField(max_length=255) slug = AutoSlugField(editable=True, populate_from='title') order = PositionField(collection='parent') parent = models.ForeignKey('self', blank=True, null=True) description = models.TextField(blank=True, default='') class Meta: ordering = ['title'] verbose_name = 'Category' verbose_name_plural = 'Categories' def __unicode__(self): return u'%s' % self.title
class Enlace(models.Model): lista = models.ForeignKey('ListEnlace', on_delete=models.CASCADE, null=True, blank=True) grupo = models.ForeignKey(GrupoEnlace) titulo = models.CharField(max_length=255) enlace = models.URLField() posicion = PositionField(default=0, collection='lista') def __str__(self): return self.titulo class Meta: ordering = ['grupo', 'posicion']
class AdditionalInfo(models.Model): name = models.CharField(max_length=200) slug = models.SlugField(unique=True) content = models.TextField() order = PositionField() contentType = models.CharField(max_length=4, choices=(('HTML', 'HTML'), ('TEXT', 'Plain Text')), default='HTML') live = models.BooleanField(default=False) class Meta: ordering = ['order'] def __unicode__(self): return self.name
class Distribucion(models.Model): lista = models.ForeignKey('ListDistribucion', on_delete=models.CASCADE, null=True, blank=True) titulo = models.CharField(max_length=150) mujer = models.PositiveIntegerField() hombre = models.PositiveIntegerField() posicion = PositionField(default=0, collection='lista') class Meta: ordering = ['posicion'] def __str__(self): return "{0} (M={1} - H={2})".format(self.titulo, self.mujer, self.hombre)
class Language(CommonAbstractModel): name = models.CharField(max_length=255, unique=True) code = models.CharField(max_length=10, unique=True) display_name = models.CharField(max_length=255, blank=True, default='') order = PositionField() class Meta: ordering = ['order'] @property def title(self): if self.display_name: return self.display_name return self.name def __unicode__(self): return u'%s' % self.name
class Interval(models.Model): def __str__(self): return self.project.project_name + ": " + self.description[:50] + " (" + str(self.id) + ")" project = models.ForeignKey(Project, related_name='intervals', on_delete=models.CASCADE, null=True, blank=True) project_name = models.CharField(null=True, blank=True, max_length=50) start = models.DateTimeField(default=timezone.now, null=True, blank=True) end = models.DateTimeField(null=True, blank=True) total = models.DurationField(default=timedelta, blank=True) description = models.TextField(blank=True) work_day = models.DateTimeField(default=timezone.now, null=True, blank=True) included = models.BooleanField(default=True, blank=True) position = PositionField(collection="project", default=0) paid = models.BooleanField(default=False, blank=True) created_at = models.DateTimeField(default=timezone.now) updated_at = models.DateTimeField(auto_now=True) class Meta: ordering = ('position',)
class SectionTemplate(models.Model): name = models.CharField(max_length=255) issue_template = models.ForeignKey(IssueTemplate, related_name='section_templates') position = PositionField(collection='issue_template', blank=True) categories = models.ManyToManyField(Category, related_name='section_templates', blank=True) content_types = models.ManyToManyField(ContentType, blank=True) def __unicode__(self): return self.name class Meta: ordering = ('issue_template', 'position') index_together = ['issue_template', 'position']
class FormElement(models.Model): workflow = models.ForeignKey(Workflow, on_delete=models.CASCADE) caption = models.CharField(max_length=200) hint = models.CharField(max_length=500, blank=True) AVAILABLE_ELEMENT_TYPES = (('text_input', 'Text Input'), ('number_input', 'Number Input'), ('date_input', 'Date Input'), ('time_input', 'Time Input'), ('date_time_input', 'Date Time Input'), ('text_area', 'Text Area')) element_type = models.CharField(max_length=50, choices=AVAILABLE_ELEMENT_TYPES) position = PositionField(collection='workflow') class Meta(object): ordering = ['position'] def __str__(self): return self.caption
class Direction(models.Model): """ A direction is a step in a recipe's preparation and each recipe can have multiple directions but obviously, each direction only applies to one recipe. """ text = models.TextField(blank=True) recipe = models.ForeignKey(Recipe, related_name='directions') order = PositionField(blank=True, null=True, unique_for_field='recipe') objects = DirectionManager() def __unicode__(self): ret = self.text[:40] if len(self.text) > 40: ret += "..." return ret class Meta: ordering = ['order', 'id']
class GalleryImage(models.Model): gallery = models.ForeignKey(FilerGallery, related_name="images") image = FilerImageField(related_name="imagesss") active = models.BooleanField(_('Active'), default=True) pub_date = models.DateTimeField(default=datetime.now) ordering = PositionField(collection='gallery') class Meta: ordering = ['ordering'] verbose_name = _('Gallery Image') verbose_name_plural = _('Gallery Images') def __unicode__(self): """Return the FilerImage name""" return u"%s" % self.image def save(self, *args, **kwargs): if not self.pk: self.pub_date = self.image.date_taken super(GalleryImage, self).save(*args, **kwargs)