class Advantage(models.Model): title = models.CharField(_('Название преимущества'), max_length=255, blank=True) text = models.TextField(_('Текст'), max_length=255, help_text=_('Максимальная длина текста - 255 символов.'), blank=True) icon = models.ImageField(_('Иконка'), upload_to='icons/advantages', blank=True) image = ImageField(_('Изображение'), upload_to='images/advantages', blank=True) slug = models.SlugField(_('Ярлык'), unique=True) def __str__(self): return self.title class Meta: verbose_name = _('Преимущество клиники') verbose_name_plural = _('Преимущества клиники')
class Message(models.Model): """ Message as sent through a Submission. """ title = models.CharField(max_length=200, verbose_name=_('title')) slug = models.SlugField(verbose_name=_('slug')) image = ImageField(upload_to='newsletter/images/%Y/%m/%d', blank=True, null=True, verbose_name=_('image')) newsletter = models.ForeignKey('Newsletter', verbose_name=_('newsletter'), default=Newsletter.get_default_id) date_create = models.DateTimeField(verbose_name=_('created'), auto_now_add=True, editable=False) date_modify = models.DateTimeField(verbose_name=_('modified'), auto_now=True, editable=False) def __unicode__(self): try: return _(u"%(title)s in %(newsletter)s") % { 'title': self.title, 'newsletter': self.newsletter } except Newsletter.DoesNotExist: logger.warn( 'Database inconsistency, related newsletter not found ' 'for message with id %d', self.id) return "%s" % self.title class Meta: verbose_name = _('message') verbose_name_plural = _('messages') unique_together = ('slug', 'newsletter') @classmethod def get_default_id(cls): try: objs = cls.objects.all().order_by('-date_create') # print(objs) if not objs.count() == 0: return objs[0].id except: pass return None
class CastPhoto(models.Model): """ Photos associated with a cast profile """ cast = models.ForeignKey(Cast, on_delete=models.CASCADE, related_name="photos") image = ImageField(upload_to=cast_photo) description = models.TextField(blank=True) created = models.DateTimeField(default=timezone.now, editable=False) class Meta: ordering = ["-pk"]
class MapImage(models.Model): id_mapimage = models.AutoField(primary_key=True) rvb_index = models.ForeignKey(RiverBasin) typm_index = models.ForeignKey(TypeMap, to_field='id_typemap') prob_index = models.ForeignKey(Probability) map_image = ImageField(upload_to='maps/static/im/', blank=True) mapcode = models.TextField('Код карты', max_length=10, blank=True) mapdescr = models.TextField('Описание карты', max_length=100, blank=True) part_num = models.IntegerField(blank=True) class Meta: managed = True db_table = u'MapImage'
class User(AbstractUser): org = models.ForeignKey(Organizacion, on_delete=models.DO_NOTHING, null=True, blank=True) avatar = ImageField(upload_to='usuario/avatar/', null=True, blank=True) def __str__(self): return self.username class Meta(object): unique_together = ('email', 'username') verbose_name = 'Usuario' verbose_name_plural = 'Usuarios'
class Media(BaseModel): title = models.CharField(max_length=120) description = models.CharField(max_length=200, blank=True) file = ImageField(upload_to=path_and_rename, max_length=500, validators=[validate_file_size]) user = models.ForeignKey(User, on_delete=models.SET_NULL, related_name='medias', null=True, blank=True) tags = models.ManyToManyField(Tag, blank=True, related_name="medias") is_avatar = models.BooleanField(default=False) def delete(self, *args, **kwargs): delete(self.file) super(Media, self).delete(*args, **kwargs) def __str__(self): return self.title
class ImageContent(models.Model): """ Model for image content for the spinner. """ image = ImageField(upload_to="spinner_images") caption = models.CharField(max_length=300) description = models.CharField(max_length=250, blank=True) url = models.URLField() def __unicode__(self): return self.caption class Meta(object): verbose_name_plural = 'images'
class Image(models.Model): """ Фотографии помещения """ place = models.ForeignKey(Place, models.CASCADE) image = ImageField(verbose_name='Файл', upload_to=get_file_path) class Meta: verbose_name = 'Фото' verbose_name_plural = 'Фотографии' def __str__(self): return self.image.name
class Product(models.Model): name = models.CharField(max_length=255) category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='product_category') image = ImageField(upload_to='photos') price = models.IntegerField() quantity = models.IntegerField(default=0) description = models.TextField() pub_date = models.DateTimeField(auto_now_add=True) hit = models.IntegerField(default=0) def __str__(self): return '{} {}'.format(self.name, self.pub_date)
class Article(models.Model): title = models.CharField(max_length=500) image = ImageField(upload_to='../media/article_images') content = models.TextField() date = models.DateField(default=timezone.now) def __str__(self): return self.date.strftime("%Y-%m-%d") + ' / ' + self.title def get_page(self): return int(Article.objects.filter(date__gt=self.date).count() / 2 + 1) class Meta: ordering = ('-date',)
class User(AbstractUser): # First Name and Last Name do not cover name patterns # around the globe. photo = ImageField(upload_to="team", blank=True, verbose_name=_("Photo")) birth_day = models.DateField(null=True, blank=True, verbose_name=_("Birth day")) def get_absolute_url(self): return reverse("users:detail", kwargs={"username": self.username}) def __str__(self): return "{0} {1} ({2})".format(self.first_name, self.last_name, self.username)
class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) sex = models.CharField("gender", max_length=6, choices=GENDER_CHOICES, default='male') thumbnail = ImageField(upload_to=get_thumbnail) def image_url(self): if not (self.thumbnail): if self.sex == 'male': return '/static/img/if_male3_403019.svg' else: return '/static/img/if_female1_403023.svg'
class Committee(models.Model): title = models.CharField(max_length=100, unique=True) email = models.EmailField(null=True, blank=True) image = ImageField(upload_to='komiteer') slug = models.SlugField(null=True, blank=True) one_liner = models.CharField(max_length=30, verbose_name="Lynbeskrivelse") description = RichTextField(verbose_name='Beskrivelse', config_name='committees') def __str__(self): return self.title def get_absolute_url(self): return reverse('verv:view', kwargs={'slug': self.slug})
class Notas(models.Model): titulo = models.CharField(max_length=200) foto = ImageField(upload_to='notas/', null=True, blank=True) video = models.URLField(null=True, blank=True, verbose_name="url video portada") slug = models.SlugField(max_length=200, editable=False) fecha = models.DateField('Fecha de publicación', auto_now_add=True) contenido = RichTextUploadingField() fotos = GenericRelation(Imagen) adjuntos = GenericRelation(Documentos) tags = TagField("Tags", help_text='Separar elementos con "," ', blank=True) user = models.ForeignKey(User) class Meta: verbose_name_plural = "Notas" ordering = ['-fecha', '-id'] def __unicode__(self): return self.titulo def save(self, *args, **kwargs): if not self.pk: self.slug = slugify(self.titulo) return super(Notas, self).save(*args, **kwargs) def imagenes(self): imagenes = Imagen.objects.filter(object_id=self.id) return imagenes def adjunto(self): adjunto = Documentos.objects.filter(object_id=self.id) return adjunto def get_absolute_url(self): return '/notas/%d/' % (self.id, ) # Para obtener el pais de la noticia def pais(self): usuario = UserProfile.objects.get(pk=self.user.id) contraparte = Contraparte.objects.get(pk=usuario.contraparte.id) pais = Pais.objects.get(pk=contraparte.pais.id) return pais # Para obtener la contraparte de la noticia def contraparte(self): usuario = UserProfile.objects.get(pk=self.user.id) contraparte = Contraparte.objects.get(pk=usuario.contraparte.id) return contraparte
class User(AbstractUser): colaborador = models.ForeignKey(Colaborador, on_delete=models.CASCADE, null=True, blank=True) avatar = ImageField(upload_to='usuario/avatar', null=True, blank=True) def __str__(self): return self.username class Meta(object): unique_together = ('email', ) verbose_name = 'Usuario' verbose_name_plural = 'Usuarios'
class Organizacion(models.Model): nombre = models.CharField(max_length=200, unique=True) descripcion = models.TextField(blank=True, null=True) correo = models.CharField(max_length=100, null=True, blank=True) web = models.CharField(max_length=200, null=True, blank=True) logo = ImageField(upload_to='organizacion', null=True, blank=True) class Meta: verbose_name_plural = u'Organizaciones' verbose_name = u'Organización' ordering = ['nombre'] def __unicode__(self): return self.nombre
class Guide(models.Model): """ A guide for a given splash page """ VERSION_CHOICES = Choices((1, 'low', _('1')), (2, 'medium', _('2')), (3, 'high', _('3'))) name = models.CharField(max_length=100, help_text='Max 100 characters.') version = models.PositiveSmallIntegerField( choices=VERSION_CHOICES, help_text='Version of splash page') headline = models.CharField( max_length=250, help_text='Max 250 characters. Use Markdown if needed for formatting.') description_image = ImageField(blank=True, upload_to='images/guides/description') rendering = ImageField(upload_to='images/guides/renderings') class Meta: verbose_name_plural = 'Guides' ordering = ('version', ) def __str__(self): return self.name def get_absolute_url(self): return reverse('email_signup', kwargs={'guide_version': self.version})
class Course(BaseModel): is_active = models.BooleanField(_(u'активен?'), default=True) name = models.CharField(_(u'название курса'), max_length=140, blank=True, null=True) description = models.TextField(_(u'описание'), blank=True) created_by = models.ForeignKey('account.Account', related_name='courses', verbose_name=_(u'создатель'), blank=True, null=True) teacher = models.ManyToManyField('account.Account', related_name='courses_teachers', verbose_name=_(u'преподователь'), blank=True, null=True) code_errors = JSONField(_(u'ошибки редактирования урока'), default={}, blank=True, null=True) is_correct = models.BooleanField(_(u'урок составлен верно?'), default=True) picture = ImageField(upload_to=course_picture_upload, blank=True, null=True) @property def type(self): return 'course' class Meta: verbose_name = _(u'Курс') verbose_name_plural = _(u'Курсы') app_label = 'quizy' def __unicode__(self): if self.name: return self.name return _(u"Курс без именени") @property def enroll_number(self): enrolls = {} for c in LessonEnroll.objects.filter(lesson__course=self): enrolls.update({ c.pk: c }) for c in self.course_enrolls.filter(course=self): enrolls.update({ c.pk: c }) return { 'number': len(enrolls.keys()) } def get_first_lesson(self): lessons = self.lesson_set.all().order_by('number')[:1] if lessons: return lessons[0]
class Article(models.Model): """ An Article within a Message which will be send through a Submission. """ sortorder = models.PositiveIntegerField(help_text=_( 'Sort order determines the order in which articles are ' 'concatenated in a post.'), verbose_name=_('sort order'), blank=True) title = models.CharField(max_length=200, verbose_name=_('title')) text = models.TextField(verbose_name=_('text')) url = models.URLField(verbose_name=_('link'), blank=True, null=True) url_title = models.CharField(max_length=20, verbose_name=_('url_title'), blank=True, null=True) # Make this a foreign key for added elegance image = ImageField(upload_to='newsletter/images/%Y/%m/%d', blank=True, null=True, verbose_name=_('image')) # Message this article is associated with # TODO: Refactor post to message (post is legacy notation). post = models.ForeignKey('Message', verbose_name=_('message'), related_name='articles', on_delete=models.CASCADE) class Meta: ordering = ('sortorder', ) verbose_name = _('article') verbose_name_plural = _('articles') unique_together = ('post', 'sortorder') def __str__(self): return self.title def save(self): if self.sortorder is None: # If saving a new object get the next available Article ordering # as to assure uniqueness. self.sortorder = self.post.get_next_article_sortorder() super(Article, self).save()
class Channel(models.Model): name = models.CharField(max_length=200) slug = models.SlugField(max_length=100, unique=True, db_index=True) image = ImageField(upload_to=_upload_path_channels, blank=True) image_is_banner = models.BooleanField(default=False) parent = models.ForeignKey('self', name='parent', null=True) description = models.TextField() created = models.DateTimeField(default=_get_now) reverse_order = models.BooleanField(default=False) exclude_from_trending = models.BooleanField(default=False) always_show = models.BooleanField(default=False, help_text=""" If always shown, it will appear as a default option visible by default when uploading and entering details. """.strip()) never_show = models.BooleanField(default=False, help_text=""" If never show, it's not an option for new events. Not even available but hidden first. """.strip()) default = models.BooleanField(default=False, help_text=""" If no channel is chosen by the user, this one definitely gets associated with the event. You can have multiple of these. It doesn't matter if the channel is "never_show". """) no_automated_tweets = models.BooleanField(default=False, help_text=""" If an event belongs to a channel with this on, that event will not cause automatic EventTweets to be generated. """) cover_art = models.ImageField( upload_to=_upload_path_channels, null=True, blank=True ) feed_size = models.PositiveIntegerField(default=20) youtube_id = models.CharField(max_length=100, null=True) class Meta: ordering = ['name'] def __unicode__(self): return self.name def get_children(self): return Channel.objects.filter(parent=self) @property def youtube_url(self): assert self.youtube_id return 'https://www.youtube.com/channel/{}'.format(self.youtube_id)
class CorporateMember(models.Model): MEMBERSHIP_LEVELS = ( (1, 'Silver'), (2, 'Gold'), (3, 'Platinum'), ) display_name = models.CharField(max_length=250) billing_name = models.CharField( max_length=250, blank=True, help_text='If different from display name.', ) logo = ImageField(upload_to='corporate-members', null=True, blank=True) description = models.TextField(blank=True) url = models.URLField(verbose_name='URL') contact_name = models.CharField(max_length=250) contact_email = models.EmailField() billing_email = models.EmailField(blank=True, help_text='If different from contact email.',) membership_level = models.IntegerField(choices=MEMBERSHIP_LEVELS) address = models.TextField(blank=True) notes = models.TextField(blank=True, help_text='Not displayed publicly.') objects = CorporateMemberManager() class Meta: ordering = ['display_name'] def __str__(self): return self.display_name def _is_invoiced(self): invoices = self.invoice_set.all() return bool(invoices) and all(invoice.sent_date is not None for invoice in invoices) _is_invoiced.boolean = True is_invoiced = property(_is_invoiced) def get_expiry_date(self): expiry_date = None for invoice in self.invoice_set.all(): if expiry_date is None: expiry_date = invoice.expiration_date elif invoice.expiration_date and invoice.expiration_date > expiry_date: expiry_date = invoice.expiration_date return expiry_date @property def thumbnail(self): return get_thumbnail(self.logo, '170x170', quality=100)
class City(models.Model): name = models.CharField("Name of City", max_length=100) image = ImageField(upload_to=image_path) slug = AutoSlugField(populate_from='name', unique=True) __lng = models.CharField("Longitude", max_length=100, db_column='lng', blank=True) __ltd = models.CharField("Latitude", max_length=100, db_column='ltd', blank=True) country = models.ForeignKey(Country, related_name='cities') def __unicode__(self): return self.name @property def lng(self): return self.__lng @lng.setter def lng(self, value): if value == '': self.__lng = '0.0' else: self.__lng = value @property def ltd(self): return self.__ltd @ltd.setter def ltd(self, value): if value == '': self.__ltd = '0.0' else: self.__ltd = value def get_absolute_url(self): return reverse('insideCity_wall', kwargs={ 'country_slug': self.country.slug, 'city_slug': self.slug }) def get_member_count(self): members = self.members.count() return members
class Detail(models.Model): """ Any additionally processed details Sharability, rating, category TODO: need to add tagging functionality """ txn = models.OneToOneField(Transaction) detail = models.TextField(blank=True) rating = models.IntegerField(default=0) PRIVATE = 0 FRIENDS = 1 COMMUNITY = 2 PUBLIC = 3 SHARING_CHOICES = ( (PRIVATE, 'Private'), (FRIENDS, 'Friends'), (COMMUNITY, 'Community'), (PUBLIC, 'Public'), ) sharing = models.IntegerField(choices=SHARING_CHOICES, default=PUBLIC) image = ImageField( upload_to="buxfer/%Y/%m/%d", max_length=200 ) #, thumbnail={'size': (50,50), 'options':['crop', 'upscale']}) category = models.ForeignKey(Category) # indicates whether this receipt has been viewed or not new = models.BooleanField(default=True) last_update = models.DateTimeField(auto_now=True) def get_json(self): result = {} result["id"] = str(self.id) result["detail"] = self.detail result["rating"] = str(self.rating) result["sharing"] = str(self.sharing) if self.image: result["image"] = self.image.url else: result["image"] = "/media/buxfer/heart.png" result["category"] = self.category.get_json() result["new"] = str(self.new) result["last_update"] = self.last_update.strftime( "%b %d, %Y - %I:%M:%S %p") result["last_timestamp"] = str( time.mktime(self.last_update.timetuple())) return result
class Article(models.Model): """ An Article within a Message which will be send through a Submission. """ @classmethod def get_next_order(cls): """ Get the next available Article ordering as to assure uniqueness. """ next_order = cls.objects.aggregate( models.Max('sortorder'))['sortorder__max'] if next_order: return next_order + 10 else: return 10 sortorder = models.PositiveIntegerField( help_text=_('Sort order determines the order in which articles are ' 'concatenated in a post.'), verbose_name=_('sort order'), db_index=True, default=lambda: Article.get_next_order()) title = models.CharField(max_length=200, verbose_name=_('title')) text = models.TextField(verbose_name=_('text')) url = models.URLField(verbose_name=_('link'), blank=True, null=True) # Make this a foreign key for added elegance image = ImageField(upload_to='newsletter/images/%Y/%m/%d', blank=True, null=True, verbose_name=_('image')) # Message this article is associated with # TODO: Refactor post to message (post is legacy notation). post = models.ForeignKey('Message', verbose_name=_('message'), related_name='articles') class Meta: ordering = ('sortorder', ) verbose_name = _('article') verbose_name_plural = _('articles') def __unicode__(self): return self.title
class DjangoHero(FundraisingModel): email = models.EmailField(blank=True) # TODO: Make this unique. stripe_customer_id = models.CharField(max_length=100, blank=True) logo = ImageField(upload_to="fundraising/logos/", blank=True) url = models.URLField(blank=True, verbose_name='URL') name = models.CharField(max_length=100, blank=True) location = models.CharField(max_length=255, blank=True) HERO_TYPE_CHOICES = ( ('individual', 'Individual'), ('organization', 'Organization'), ) hero_type = models.CharField(max_length=30, choices=HERO_TYPE_CHOICES, blank=True) is_visible = models.BooleanField( default=False, verbose_name="Agreed to displaying on the fundraising page?", ) is_subscribed = models.BooleanField( default=False, verbose_name="Agreed to being contacted by DSF?", ) approved = models.BooleanField( null=True, verbose_name="Name, URL, and Logo approved?", ) objects = DjangoHeroManager() def __str__(self): return self.name if self.name else 'Anonymous #{}'.format(self.pk) class Meta: verbose_name = "Django hero" verbose_name_plural = "Django heroes" @property def display_name(self): return self.name @property def thumbnail(self): return get_thumbnail(self.logo, '170x170', quality=100) if self.logo else None @property def name_with_fallback(self): return self.name if self.name else 'Anonymous Hero'
class PybbProfile(models.Model): """ Abstract class for user profile, site profile should be inherted from this class """ class Meta(object): abstract = True permissions = (("block_users", "Can block any user"), ) signature = models.TextField(_('Signature'), blank=True, max_length=defaults.PYBB_SIGNATURE_MAX_LENGTH) signature_html = models.TextField( _('Signature HTML Version'), blank=True, max_length=defaults.PYBB_SIGNATURE_MAX_LENGTH + 30) time_zone = models.FloatField(_('Time zone'), choices=TZ_CHOICES, default=float( defaults.PYBB_DEFAULT_TIME_ZONE)) language = models.CharField( _('Language'), max_length=10, blank=True, choices=settings.LANGUAGES, default=dict(settings.LANGUAGES)[settings.LANGUAGE_CODE.split('-')[0]]) show_signatures = models.BooleanField(_('Show signatures'), blank=True, default=True) post_count = models.IntegerField(_('Post count'), blank=True, default=0) avatar = ImageField(_('Avatar'), blank=True, null=True, upload_to=get_file_path) autosubscribe = models.BooleanField( _('Automatically subscribe'), help_text=_('Automatically subscribe to topics that you answer'), default=defaults.PYBB_DEFAULT_AUTOSUBSCRIBE) def save(self, *args, **kwargs): self.signature_html = defaults.PYBB_MARKUP_ENGINES[ defaults.PYBB_MARKUP](self.signature) super(PybbProfile, self).save(*args, **kwargs) @property def avatar_url(self): try: return self.avatar.url except: return defaults.PYBB_DEFAULT_AVATAR_URL
class Document(models.Model): ''' Downloadable document ''' group = models.ForeignKey(DocumentGroup, on_delete=models.CASCADE) cluster = models.CharField(max_length=30, blank=True, null=True) name = models.CharField(max_length=100) description = models.TextField(blank=True, null=True) url = models.URLField(blank=True, null=True) doc = ImageField(upload_to=upload_to_cluster, blank=True, null=True) order = models.PositiveSmallIntegerField(default=1) def __str__(self): return self.name class Meta: ordering = ('name', )
class Imagen(models.Model): ''' Modelo generico para subir imagenes en todos los demas app :)''' content_type = models.ForeignKey(ContentType,on_delete=models.DO_NOTHING) object_id = models.IntegerField(db_index=True) content_object = fields.GenericForeignKey('content_type', 'object_id') nombre_img = models.CharField("Nombre",max_length=200, null=True, blank=True) foto = ImageField("Foto",upload_to=get_file_path,null=True, blank=True) tags_img = TaggableManager("Tags",help_text='Separar elementos con "," ', blank=True) fileDir = 'fotos/' class Meta: verbose_name_plural = "Imágenes" def __str__(self): return self.nombre_img
class Category(models.Model): title = models.CharField(max_length=50, verbose_name=u'Заголовок категории') slug = models.SlugField(max_length=50) main_image = ImageField(upload_to=get_upload_path, verbose_name=u'Изображение категории') show_in_slider = models.BooleanField( default=True, verbose_name=u'Показывать в слайдере?') def __unicode__(self): return self.title class Meta: verbose_name = u'Категория' verbose_name_plural = u'Категории'
class Client(models.Model): title = models.CharField(max_length=200, unique=True, verbose_name=u"название клиента",) image = ImageField(upload_to=lambda i, f: "projects/clients/%s%s" % \ (urandom(16).encode("hex"), splitext(f)[1].lower()), blank=True, verbose_name=u"изображение",) class Meta: ordering = ("title",) verbose_name = u"клиент" verbose_name_plural = u"клиенты" def __unicode__(self): return self.title