class Image(models.Model): image_field = ImageCropField(upload_to="image/") cropping = ImageRatioField("image_field", "120x100", allow_fullsize=True) cropping_free = ImageRatioField("image_field", "300x230", free_crop=True, size_warning=True) class Meta: app_label = "example" def get_cropping_as_list(self): if self.cropping: return list(map(int, self.cropping.split(",")))
class Image(models.Model): image_field = ImageCropField(upload_to='image/') cropping = ImageRatioField('image_field', '120x100', allow_fullsize=True) cropping_free = ImageRatioField('image_field', '300x230', free_crop=True, size_warning=True) class Meta: app_label = 'example' def get_cropping_as_list(self): if self.cropping: return list(map(int, self.cropping.split(',')))
class UserProfile(User): publicname = models.CharField(default='', max_length=250) phone = models.CharField(default='', max_length=250) photo_user = models.ImageField(upload_to='photo_user', null=True, blank=True) photo_car = models.ImageField(upload_to='photo_car', null=True, blank=True) cropping_user = ImageRatioField('photo_user', '150x150') cropping_car = ImageRatioField('photo_car', '150x150') @property def image_user_tag(self): return mark_safe('<img src="%s" />' % self.photo_user.url) @property def get_small_image_user(self): return mark_safe('<img src="%s" />' % self.get_small_image_user_url) @property def get_small_image_user_url(self): try: return BACKEND_URL + get_thumbnailer( self.photo_user).get_thumbnail({ 'size': (100, 100), 'box': self.cropping_user, 'crop': 'smart', }).url except: return BACKEND_URL + 'noimage.png' @property def image_car_tag(self): return mark_safe('<img src="%s" />' % self.photo_car.url) @property def get_small_image_car(self): return mark_safe('<img src="%s" />' % self.get_small_image_car_url) @property def get_small_image_car_url(self): try: return BACKEND_URL + get_thumbnailer(self.photo_car).get_thumbnail( { 'size': (100, 100), 'box': self.cropping_car, 'crop': 'smart', }).url except: return BACKEND_URL + 'noimage.png'
class Product(models.Model): name = models.CharField(max_length=250, default='') image = ImageCropField(upload_to='product', null=True, blank=True) category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True, blank=True) subcategory = models.ForeignKey(SubCategory, on_delete=models.SET_NULL, null=True, blank=True) cropping = ImageRatioField('image', '100x100') @property def image_tag(self): try: return mark_safe('<img src="%s" />' % self.image.url) except: return 'None' @property def get_small_image(self): return mark_safe('<img src="%s" />' % self.get_small_image_url) @property def get_small_image_url(self): return BASE_URL + get_thumbnailer(self.image).get_thumbnail({ 'size': (100, 100), 'box': self.cropping, 'crop': 'smart', }).url def __str__(self): return '%s (%s)' % (self.name, self.category) class Meta: verbose_name = 'Product' verbose_name_plural = 'Products'
class WithPicture(models.Model): """ Abstract model to be mixed in to models requiring a single image. """ picture = models.ImageField( upload_to="uploads/news_pictures", null=True, blank=True, verbose_name="Bilde", help_text=("Bilder som er større enn 770x300 px ser best ut. " "Du kan beskjære bildet etter opplasting."), ) cropping = ImageRatioField("picture", "770x300", allow_fullsize=False, verbose_name="Beskjæring") class Meta: abstract = True def get_picture_url(self): """Return the absolute url of the main picture""" domain = Site.objects.get_current().domain media_url = settings.MEDIA_URL filename = self.picture.name return f"http://{domain}{media_url}{filename}"
class Quiz(models.Model): """ Master Model which holds all the components. Quiz classes store publishing information, basic details and relationships with question objects. """ headline = models.CharField('Headline', max_length=255) blurb = models.TextField('Quiz Description', null=True, blank=True) published = models.BooleanField('Published') pub_date = models.DateTimeField('Publish Date/Time') questions = models.ManyToManyField('Question', null=True, blank=True) quiz_photo = ImageCropField('Art', upload_to=uploadQuizzoPhoto, null=True, blank=True) cropping = ImageRatioField('quiz_photo', '300x400') slug = models.SlugField('Slug') class Meta: ordering = ['-pub_date'] verbose_name_plural = 'Quizzes' get_latest_by = 'pub_date' def is_published(self): return self.published def __unicode__(self): return self.headline def get_absolute_url(self): if self.published == True: return "/webapps/quiz/%s/%s" % (str(self.id), self.slug)
class UserProfile(User): name = models.CharField(max_length=250, default='') phone = models.CharField(max_length=250, default='') rating = models.IntegerField(default=0) image = ImageCropField(blank=True, upload_to='user_photo') cropping = ImageRatioField('image', '60x60') @property def get_small_image(self): return mark_safe('<img src="%s" />' % self.get_small_image_url) @property def get_small_image_url(self): try: return BACKEND_URL + get_thumbnailer(self.image).get_thumbnail( { 'size': (60, 60), 'box': self.cropping, 'crop': 'smart', }).url except: return BACKEND_URL + 'noimage.png' def __str__(self): return self.name class Meta: verbose_name = 'UserProfile' verbose_name_plural = 'UserProfile'
class Gallery(models.Model): title = models.CharField(max_length=250, null=True, blank=True) image = ImageCropField(blank=True, null=True, upload_to='uploaded_images') cropping = ImageRatioField('image', '150x150') @property def get_small_img(self): url = get_thumbnailer(self.image).get_thumbnail({ 'size': (231, 231), 'box': self.cropping, 'crop': True, 'detail': True, }).url return url def __str__(self): thumbnail_url = get_thumbnailer(self.image).get_thumbnail({ 'size': (150, 150), 'box': self.cropping, 'crop': True, 'detail': True, }).url return mark_safe('<img width="100" src="%s" />' % thumbnail_url)
class Product(models.Model): title = models.CharField(max_length=120) slug = models.SlugField(blank=True, unique=True) description = models.TextField() category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True, blank=True) subcategory = ChainedForeignKey(Subcategory, chained_field="category", chained_model_field="category", show_all=False, auto_choose=True, sort=True, null=True, blank=True, on_delete=models.SET_NULL) price = models.PositiveIntegerField(validators=[MinValueValidator(0)]) image = models.ImageField(upload_to=upload_image_path, null=True, blank=True) cropping = ImageRatioField('image', '640x640') active = models.BooleanField(default=True) inventory = models.PositiveIntegerField(validators=[MinValueValidator(0)]) size = models.CharField(max_length=30) weight = models.CharField(max_length=30) color = models.CharField(max_length=30) odor = models.CharField(max_length=50) def clean_inventory(self): if self.inventory < 0: raise ValidationError( 'Draft entries may not have a publication date.') return objects = ProductManager() # Product.objects.(something) def get_absolute_url(self): #return "/products/{slug}/".format(slug=self.slug) return reverse("products:detail", kwargs={"slug": self.slug}) # app_name:name on urls.py def add_to_cart(self): return "{0}?item={1}&qty=1".format(reverse("carts:cart"), self.id) # string manipulation def remove_from_cart(self, instance): instance.cart.update_subtotal() return "{0}?item={1}&qty=1&delete=True".format( reverse("carts:cart"), self.id) # string manipulation def __str__(self): return self.title def __unicode__(self): return self.title
class Post(models.Model): title = models.CharField(_('Title'), max_length=30, blank=True) slug = AutoSlugField(populate_from=['title'], unique=True, allow_unicode=True, slugify_function=slugify_function) image = models.ImageField(_('Image'), upload_to='uploaded_images') # size is "width x height" cropping = ImageRatioField('image', '900 x 750', size_warning=True) caption = models.TextField(_('Caption'), max_length=1024, blank=True) location = models.CharField(_('Location'), blank=True, max_length=250) created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) STATUS_CHOICES = ( ('a', _('Archive')), # Archive ('p', _('Publish')), # Publish ) status = models.CharField(_('Publish status'), max_length=2, choices=STATUS_CHOICES, blank=True, default='p') author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='posts', null=True) category = models.ManyToManyField(Category, verbose_name=_('Category'), related_name='posts', blank=True, null=True) hits = models.ManyToManyField(IPAddress, through='PostHit', blank=True, related_name='hits', verbose_name='views') def img_tag(self): return format_html( "<img width=100 height=75 style='border-radius : 5px;' src ='{}'> " .format(self.image.url)) img_tag.short_description = 'Image' def thumbnail_url(self): thumbnail_url = get_backend().get_thumbnail_url( self.image, { 'size': (900, 750), 'box': self.cropping, 'crop': True, 'detail': True, }) return thumbnail_url def __str__(self): return self.title
class ImageBlock(Block): image = ImageCropField(upload_to='uploads/images/%Y/%m') caption = models.CharField(max_length=255, blank=True) use_thumbnail = models.BooleanField(help_text='Crop using the thumbnail dimensions specified below, or simply crop the uploaded image.') thumbnail_dimensions = models.CharField(max_length=255, default=settings.IMAGE_CROPPING_SIZE, help_text='Maximum dimensions for cropped image.', blank=True) thumbnail = ImageRatioField('image', '0x0') # 0x0 allows users to freely transform thumbnail. def __unicode__(self): return self.image.name
class User(AbstractBaseUser): id = models.AutoField(primary_key=True, unique=True) username = models.CharField(max_length=50, unique=True, db_index=True) email = models.EmailField(max_length=254, unique=True) name = models.CharField(max_length=50, db_index=True, unique=True) image = ImageCropField(upload_to='photos/', default=os.path.join('photos', '001.jpg').replace('\\', '/')) cropping = ImageRatioField('image', '200x200', allow_fullsize=True) describe = models.CharField(max_length=254, db_index=True) money = models.IntegerField(default=100) is_active = models.BooleanField(default=True) is_admin = models.BooleanField(default=False) # Permissions can_comment = models.BooleanField(default=True) can_upload = models.BooleanField(default=True) can_bullet = models.BooleanField(default=True) follow_users = models.ManyToManyField("User", related_name="following_users") like_videos = models.ManyToManyField("Video", related_name="like_videos") collection_videos = models.ManyToManyField( "Video", related_name="collection_videos") objects = UserManager() USERNAME_FIELD = 'username' REQUIRED_FIELDS = ['email'] def get_full_name(self): return self.name def get_short_name(self): return self.name @property def is_staff(self): return self.is_admin def __str__(self): return self.username def has_perm(self, perm, obj=None): "Does the user have a specific permission?" # Simplest possible answer: Yes, always return True def has_module_perms(self, app_label): "Does the user have permissions to view the app `app_label`?" # Simplest possible answer: Yes, always return True def get_absolute_url(self): return '/personal/%u' % self.pk
class QSICPic(models.Model): caption = models.CharField(max_length=128, blank=True) photo = models.ImageField(upload_to='qsicpics/', null=True, blank=True) banner_crop = ImageRatioField('photo', '960x300', size_warning=True) event = models.ForeignKey('events.Event', null=True, blank=True) performance = models.ForeignKey('events.Performance', null=True, blank=True) group = models.ForeignKey('groups.Group', null=True, blank=True) performer = models.ForeignKey('performers.Performer', null=True, blank=True)
class Entry(ModelWithSlug): STATUS_OPTIONS = ( (0, 'Draft'), (1, 'Published'), ) VISIBILITY_OPTIONS = ( (0, 'Public'), (1, 'Private'), ) title = models.CharField(max_length=100) slug = models.SlugField(max_length=255) publish_date = models.DateTimeField(auto_now_add=True) status = models.IntegerField(max_length=1, choices=STATUS_OPTIONS, default=0) visibility = models.IntegerField(max_length=1, choices=VISIBILITY_OPTIONS, default=0) body = models.TextField() excerpt = models.TextField( blank=True, help_text='A short introduction for the entry. If not supplied, \ the first paragraph of the body will be used.') category = models.ForeignKey('Category') tags = models.ManyToManyField('Tag', blank=True) user = models.ForeignKey(User) image = ImageCropField(upload_to='i/uploads/%Y/%m') cropping = ImageRatioField('image', settings.IMAGE_CROPPING_SIZE) caption = models.CharField(max_length=255, blank=True) objects = models.Manager() published_objects = PublishedManager() class Meta: verbose_name_plural = "Entries" ordering = ['-publish_date'] def __unicode__(self): return self.title @models.permalink def get_absolute_url(self): return ('blog.views.entry', (), {'slug': self.slug}) def save(self, **kwargs): unique_slugify(self, self.title) super(Entry, self).save()
class UserMedia(models.Model): TYPE_MEDIA = (('photo', _('Photo')), ('video', _('Video'))) ORIENTATION = (('land', _('Landscape')), ('port', _('Portrait'))) ROLE_MEDIA = (('public', _('Public')), ('private', _('Private'))) type_media = models.CharField(verbose_name=_('Type of media'), choices=TYPE_MEDIA, default='photo', max_length=5) role_media = models.CharField(verbose_name=_('Role of media'), choices=ROLE_MEDIA, default='public', max_length=10) orient = models.CharField(verbose_name=_('Orientation'), choices=ORIENTATION, default='port', max_length=5) user = models.ForeignKey(UserProfile, on_delete=models.CASCADE) is_main = models.BooleanField(default=False) is_approved = models.BooleanField(default=False) is_deleted = models.BooleanField(default=False) is_published = models.BooleanField(default=False) title = models.CharField(max_length=250) video = models.FileField(blank=True, upload_to='user_video') image = ImageCropField(blank=True, upload_to='user_photo') cropping = ImageRatioField('image', '80x80') @property def image_tag(self): return mark_safe('<img width="150" src="%s" />' % self.image.url) @property def get_small_image_tag(self): return mark_safe('<img src="%s" />' % self.get_small_image_url) @property def get_small_image_url(self): try: return BACKEND_URL + get_thumbnailer(self.image).get_thumbnail( { 'size': (80, 80), 'box': self.cropping, 'crop': 'smart', }).url except: return BACKEND_URL + 'noimage.png'
class HomeImage(models.Model): image = models.ForeignKey(Image) image_field = ImageCropField(blank=True, null=True, upload_to='home_slide/') active = models.BooleanField(default=0) cropping = ImageRatioField('image_field', '625x350', size_warning=True) croppedImage = ImageField(blank=True, null=True, upload_to='home_slide/') def __unicode__(self): return self.image.collection.artist.__unicode__() def save(self, *args, **kwargs): # Get file name from image strImagePath = self.image.photo.name strImageName = strImagePath.split('/')[3] strUploadTo = 'home_slide/' strExtention = '.300x300_q85_detail.jpg' # Set image field path strDesImage = strUploadTo + strImageName self.image_field = strDesImage if(self.id is not None): homeImage = HomeImage.objects.get(pk=self.id) else: homeImage = None if(homeImage is None or homeImage.image != self.image): # Copy file into image field path im = PImage.open(settings.MEDIA_ROOT + strImagePath) im.save(settings.MEDIA_ROOT + strDesImage) # Copy image into image field path with extension for Cropping field exIm = PImage.open(settings.MEDIA_ROOT + strImagePath) exIm.save(settings.MEDIA_ROOT + strDesImage + strExtention) if(self.cropping != ''): # Crop image cropImage = PImage.open(settings.MEDIA_ROOT + strImagePath) cropP = self.cropping.split(',') box = (int(cropP[0]), int(cropP[1]), int(cropP[2]), int(cropP[3])) croppedImageName = strUploadTo + 'slide_' + str(self.image.id) + '.jpg' self.croppedImage = croppedImageName cropImage.crop(box).save(settings.MEDIA_ROOT + croppedImageName) # Resize cropped image size = 625,350 im = PImage.open(settings.MEDIA_ROOT + croppedImageName) im = im.resize(size, PImage.ANTIALIAS) im.save(settings.MEDIA_ROOT + croppedImageName) super(HomeImage, self).save(*args, **kwargs)
class Maket(models.Model): title = models.CharField(verbose_name='Заголовок', max_length=250) image = ImageCropField(upload_to='files') cropping = ImageRatioField('image', '150x150') @property def small_image_url(self): try: return get_thumbnailer(self.image).get_thumbnail({ 'size': (150, 150), 'box': self.cropping, 'crop': 'smart', }).url except Exception as e: print(e) return SERVER_NAME + 'static/noimage.png'
class Maket(models.Model): title = models.CharField(verbose_name=_('Title'), max_length=250) image = ImageCropField(upload_to='files') cropping = ImageRatioField('image', '150x150') project = models.ForeignKey('project.Project', on_delete=models.CASCADE, default=1) @property def small_image_url(self): try: return get_thumbnailer(self.image).get_thumbnail({ 'size': (150, 150), 'box': self.cropping, 'crop': 'smart', }).url except Exception as e: print(e) return SERVER_NAME + 'static/noimage.png'
class File(models.Model): title = models.CharField(verbose_name=_('Title'), max_length=250, blank=True, null=True) image = ImageCropField(upload_to='files') task = models.ForeignKey( Task, verbose_name=_("Task"), on_delete=models.CASCADE) cropping = ImageRatioField('image', '80x80') @property def small_image_url(self): try: return get_thumbnailer(self.image).get_thumbnail({ 'size': (80, 80), 'box': self.cropping, 'crop': 'smart', }).url except Exception as e: return SERVER_NAME + 'static/noimage.png'
class Project(models.Model): title = models.CharField(verbose_name='Название', max_length=160, unique=True) name = models.CharField(verbose_name='Название (лат)', max_length=160, unique=True) desc = models.TextField(verbose_name='Описание') image = ImageCropField(upload_to='files') cropping = ImageRatioField('image', '150x150') git = models.CharField(verbose_name='git репозиторий', max_length=250, unique=True) git_url = models.CharField(verbose_name='url git репозитория', max_length=250, default='') release_url = models.CharField(verbose_name='url релизной версии', max_length=250, default='') media_path = models.CharField(verbose_name='Путь к медиа', max_length=250, default='') venv_path = models.CharField(verbose_name='Путь к ВО', max_length=250, default='', null=True, blank=True) def __str__(self): return self.title @property def small_image_url(self): try: return get_thumbnailer(self.image).get_thumbnail({ 'size': (80, 80), 'box': self.cropping, 'crop': 'smart', }).url except Exception as e: return '/static/noimage.png' @property def small_image_tag(self): return mark_safe(f'<img src="{self.small_image_url}">')
class Product(models.Model): name = models.CharField(max_length=250, default='') image = ImageCropField(upload_to='product', null=True, blank=True) cropping = ImageRatioField( 'image', '100x100') # поле для хранения размера обрезки изображения category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True, blank=True) subcategory = models.ForeignKey(SubCategory, on_delete=models.SET_NULL, null=True, blank=True) @property def get_small_image(self): return mark_safe('<img src="%s" />' % self.get_small_image_url) @property def get_small_image_url(self): try: return BACKEND_URL + get_thumbnailer(self.image).get_thumbnail( { 'size': (100, 100), 'box': self.cropping, 'crop': 'smart', }).url except: return BAKEND_URL + "Noimage.png" def __str__(self): return '%s (%s)' % (self.name, self.category) @property def image_tag(self): try: return mark_safe('<img src="%s" />' % self.image.url) except: return 'None' class Meta: ordering = ['category']
class Profile(models.Model): user = models.OneToOneField(BaseUser) full_name = models.CharField(blank=True, max_length=255) description = models.TextField(blank=True, null=True) social_accounts = JSONField(default=json_field_default, blank=True, null=True) works_at = models.CharField(blank=True, null=True, max_length=255) studies_at = models.CharField(blank=True, null=True, max_length=255) avatar = ImageCropField(blank=True, null=True) full_image = ImageCropField(upload_to='avatars/', blank=True, null=True) cropping = ImageRatioField('full_image', '300x300') skype = models.CharField(blank=True, null=True, max_length=255) def get_gh_profile_url(self): return self.social_accounts.get('GitHub')
class User(AbstractBaseUser): id = models.AutoField(primary_key=True, unique=True) username = models.CharField(max_length=50, unique=True, db_index=True) email = models.EmailField(max_length=254, unique=True) name = models.CharField(max_length=50, db_index=True, unique=True) image = ImageCropField( upload_to='avatar/', default=os.path.join('', 'default.jpg').replace('\\', '/') ) cropping = ImageRatioField('image', '200x200', allow_fullsize=True) is_active = models.BooleanField(default=False) is_admin = models.BooleanField(default=False) objects = UserManager() USERNAME_FIELD = 'username' REQUIRED_FIELDS = ['email'] def get_full_name(self): return self.name def get_short_name(self): return self.name @property def is_staff(self): return self.is_admin def __str__(self): return self.username def has_perm(self, perm, obj=None): "Does the user have a specific permission?" # Simplest possible answer: Yes, always return True def has_module_perms(self, app_label): "Does the user have permissions to view the app `app_label`?" # Simplest possible answer: Yes, always return True
class Image(Orderable): gallery = models.ForeignKey(Gallery, related_name="images") title = models.CharField(_('title'), max_length=100, blank=True) caption = models.TextField(_('caption'), blank=True) image = ImageCropField(blank=True, null=True, upload_to='uploads/galleries/images/') cropping = ImageRatioField( 'image', IMAGE_CROPPING_RATIO) # size is "width x height" class Meta(Orderable.Meta): verbose_name = _('image') verbose_name_plural = _('images') def __unicode__(self): return '%s' % (self.title or self.id) @property def thumbnail(self): return thumbnail(self.image, self.cropping) @property def croppable(self): return croppable(self.image) def serialize(self): context = { 'id': self.id, 'gallery': self.gallery.id, 'title': self.title, 'caption': self.caption, 'image': self.image, 'cropping': self.cropping, 'thumbnail': self.thumbnail, 'croppable': self.croppable, 'org_width': self.image.width, 'org_height': self.image.height, 'order': self.sort_order } return context
class Professor(EscolaMixin): bibliografia = models.TextField(blank=True, default='', verbose_name=_('Bibliografia')) avatar = ImageCropField(upload_to="avatars/", verbose_name=_('Avatar'), validators=[avatar_validation], null=True, blank=True) cropping = ImageRatioField( 'avatar', '128x128', verbose_name=_('Seleção (Enquadramento)'), help_text=_('A configuração do Avatar ' 'é possível após a atualização da fotografia.')) class Meta: verbose_name = _('Professor') verbose_name_plural = _('Professores')
class Category(models.Model): image = models.ImageField(_('Image'), upload_to='category_images') # size is "width x height" cropping = ImageRatioField('image', '900 x 874', size_warning=True) title = models.CharField(_('Title'), max_length=30) slug = AutoSlugField(populate_from=['title'], unique=True, allow_unicode=True, slugify_function=slugify_function) def thumbnail_url(self): thumbnail_url = get_backend().get_thumbnail_url( self.image, { 'size': (900, 874), 'box': self.cropping, 'crop': True, 'detail': True, }) return thumbnail_url def __str__(self): return self.title
class ProfilePhoto(models.Model): def get_upload_path(self, filename): try: ext = filename.rsplit('.', -1)[-1] except: ext = 'jpg' filename = "%s.%s" % (uuid.uuid4(), ext) profile_photo_url = os.path.join("profile_photo", "amityadav", filename) return profile_photo_url user = models.ForeignKey(User, null=True) profile_photo = models.ImageField(max_length=2000, upload_to=get_upload_path) cropping = ImageRatioField('profile_photo', '220x196') uploaded_on = models.DateTimeField(null=True) is_set = models.BooleanField(default=False) key = models.CharField(max_length=90) profile_photo_100x50 = ImageSpecField(source='profile_photo', processors=[ResizeToFill(100, 50)], format='JPEG', options={'quality': 90}) @property def key_generate(self): """returns a string based unique key with length 80 chars""" while 1: key = str(random.getrandbits(256)) try: ProfilePhoto.objects.get(key=key) except: return key class Meta: app_label = 'users'
class FrontPageNews(models.Model): """ Things that turn up on the frontpage Each frontpage entity links to different types of content using a generic relation. It is assumed that the related object implements the fields: headline, lead_paragraph, picture and cropping, just as NewsArticle. This is not ideal, and it might change in the future, or it might not. """ # Fields for referencing objects of different contenttype # See https://docs.djangoproject.com/en/1.11/ref/contrib/contenttypes/#generic-relations object_id = models.PositiveIntegerField(blank=True, null=True) content_type = models.ForeignKey(ContentType, null=True, on_delete=models.CASCADE) content_object = GenericForeignKey("content_type", "object_id") # Fields for sorting and prioritizing on the frontpage created_date = models.DateTimeField( auto_now_add=True, null=True, verbose_name="Dato laget", help_text="Dette feltet gjør egentlig ingenting. Brukes kun for å se når nyheten ble laget.", ) bump_time = models.DateTimeField( default=timezone.now, blank=False, verbose_name="Sorteringstid", help_text=( "Tiden nyheten ble bumpet opp til toppen av forsiden. " "Brukes som felt for å sortere nyhetene." ), ) visible = models.BooleanField( default=True, verbose_name="Er synlig", help_text="Sett dette feltet til usann for å skjule nyheten fra forsiden", ) sticky = models.BooleanField( default=False, verbose_name="Klebrig", help_text="Blir værende på toppen. Dvs. sorters foran alle andre nyheter.", ) # Fields to override the content from the content_object title_override = models.CharField(verbose_name="tittel", max_length=100, blank=True) text_override = models.TextField(verbose_name="tekst", blank=True) picture_override = models.ImageField( upload_to="uploads/frontpageoverride", null=True, blank=True, verbose_name="Bilde", help_text="Bilder som er større enn 770x300 px ser best ut. " "Du kan beskjære bildet etter opplasting.", ) cropping_override = ImageRatioField( "picture_override", "770x300", allow_fullsize=False, verbose_name="Beskjæring" ) class Meta: verbose_name = "Forsidenyhet" verbose_name_plural = "Forsidenyheter" ordering = ( "-sticky", "-bump_time", ) def __str__(self): return self.headline @property def obj(self): """ In case the content_object does not exist, return a dummy object to not crash the site. """ return self.content_object or DummyContentObject() def get_absolute_url(self): """Get the url of the related object""" return self.obj.get_absolute_url() @property def headline(self): """Get overridden headline or the object's headline""" return self.title_override or self.obj.headline @property def lead_paragraph(self): """Get overridden lead paragraph or the object's lead paragraph""" return self.text_override or self.obj.lead_paragraph @property def picture(self): """Get overridden picture or the objcet's picture""" return self.picture_override or self.obj.picture @property def cropping(self): """Get cropping corresponding to the picture""" return self.cropping_override or self.obj.cropping def bump(self): """Make the news item climb to the top of list""" self.bump_time = timezone.now() self.save(update_fields=["bump_time"])
class Parlamentar(models.Model): FEMININO = 'F' MASCULINO = 'M' SEXO_CHOICE = ((FEMININO, _('Feminino')), (MASCULINO, _('Masculino'))) nivel_instrucao = models.ForeignKey(NivelInstrucao, blank=True, null=True, on_delete=models.PROTECT, verbose_name=_('Nível Instrução')) situacao_militar = models.ForeignKey(SituacaoMilitar, blank=True, null=True, on_delete=models.PROTECT, verbose_name=_('Situação Militar')) nome_completo = models.CharField(max_length=50, verbose_name=_('Nome Completo')) nome_parlamentar = models.CharField(max_length=50, verbose_name=_('Nome Parlamentar')) sexo = models.CharField(max_length=1, verbose_name=_('Sexo'), choices=SEXO_CHOICE) data_nascimento = models.DateField(blank=True, null=True, verbose_name=_('Data Nascimento')) cpf = models.CharField(max_length=14, blank=True, verbose_name=_('C.P.F')) rg = models.CharField(max_length=15, blank=True, verbose_name=_('R.G.')) titulo_eleitor = models.CharField(max_length=15, blank=True, verbose_name=_('Título de Eleitor')) numero_gab_parlamentar = models.CharField(max_length=10, blank=True, verbose_name=_('Nº Gabinete')) telefone = models.CharField(max_length=50, blank=True, verbose_name=_('Telefone')) fax = models.CharField(max_length=50, blank=True, verbose_name=_('Fax')) endereco_residencia = models.CharField( max_length=100, blank=True, verbose_name=_('Endereço Residencial')) municipio_residencia = models.CharField(max_length=50, blank=True, verbose_name=_('Município')) uf_residencia = models.CharField(max_length=2, blank=True, choices=LISTA_DE_UFS, verbose_name=_('UF')) cep_residencia = models.CharField(max_length=9, blank=True, verbose_name=_('CEP')) telefone_residencia = models.CharField( max_length=50, blank=True, verbose_name=_('Telefone Residencial')) fax_residencia = models.CharField(max_length=50, blank=True, verbose_name=_('Fax Residencial')) endereco_web = models.URLField(max_length=100, blank=True, verbose_name=_('HomePage')) profissao = models.CharField(max_length=50, blank=True, verbose_name=_('Profissão')) email = models.EmailField(max_length=100, blank=True, verbose_name=_('E-mail')) locais_atuacao = models.CharField(max_length=100, blank=True, verbose_name=_('Locais de Atuação')) ativo = models.BooleanField(db_index=True, default=False, choices=YES_NO_CHOICES, verbose_name=_('Ativo na Casa?')) biografia = models.TextField(blank=True, verbose_name=_('Biografia')) # XXX Esse atribuito foi colocado aqui para não atrapalhar a migração fotografia = ImageCropField(verbose_name=_('Fotografia'), upload_to=foto_upload_path, validators=[restringe_tipos_de_arquivo_img], null=True, blank=True) cropping = ImageRatioField( 'fotografia', '128x128', verbose_name=_('Avatar'), size_warning=True, help_text=_('A configuração do Avatar ' 'é possível após a atualização da fotografia.')) # campo conceitual de reversão genérica para o model Autor que dá a # o meio possível de localização de tipos de autores. autor = SaplGenericRelation( Autor, related_query_name='parlamentar_set', fields_search=( # na primeira posição dever ser campo simples sem __ ('nome_completo', '__icontains'), ('nome_parlamentar', '__icontains'), ('filiacao__partido__sigla', '__icontains'), )) class Meta: verbose_name = _('Parlamentar') verbose_name_plural = _('Parlamentares') ordering = ['nome_parlamentar'] def __str__(self): return self.nome_parlamentar @property def filiacao_atual(self): ultima_filiacao = self.filiacao_set.order_by('-data').first() if ultima_filiacao and not ultima_filiacao.data_desfiliacao: return ultima_filiacao.partido.sigla else: return _('Sem Partido') @property def avatar_html(self): return '<img class="avatar-parlamentar" src='\ + self.fotografia.url + '>'if self.fotografia else '' def delete(self, using=None, keep_parents=False): if self.fotografia: self.fotografia.delete() return models.Model.delete(self, using=using, keep_parents=keep_parents) def save(self, force_insert=False, force_update=False, using=None, update_fields=None): if not self.pk and self.fotografia: fotografia = self.fotografia self.fotografia = None models.Model.save(self, force_insert=force_insert, force_update=force_update, using=using, update_fields=update_fields) self.fotografia = fotografia return models.Model.save(self, force_insert=force_insert, force_update=force_update, using=using, update_fields=update_fields)
class BaseUser(AbstractBaseUser, PermissionsMixin): first_name = models.CharField(max_length=20) last_name = models.CharField(max_length=20) email = models.EmailField(unique=True) english_names = models.CharField(max_length=50, null=True, blank=True) is_active = models.BooleanField(default=False) is_staff = models.BooleanField(default=False) birth_place = models.ForeignKey(City, null=True, blank=True) github_account = models.URLField(null=True, blank=True) linkedin_account = models.URLField(null=True, blank=True) description = models.TextField(null=True, blank=True) twitter_account = models.URLField(null=True, blank=True) works_at = models.CharField(null=True, blank=True, max_length=110) studies_at = models.CharField(blank=True, null=True, max_length=110) avatar = ImageCropField(blank=True, null=True) full_image = ImageCropField(upload_to='avatars/', blank=True, null=True) cropping = ImageRatioField('full_image', '300x300') created_at = models.DateTimeField(auto_now_add=True, null=True) education_info = models.ManyToManyField(EducationPlace, through='EducationInfo', related_name='info') USERNAME_FIELD = 'email' objects = UserManager() def get_full_name(self): return self.email def get_short_name(self): return self.email def __str__(self): return self.email @property def full_name(self): return "{} {}".format(self.first_name, self.last_name) def get_competitor(self): try: return self.competitor except: return False def get_student(self): try: return self.student except: return False def get_teacher(self): try: return self.teacher except: return False def get_interviewer(self): try: return self.interviewer except: return False def get_english_names(self): return self.english_names