class Image(models.Model): post = models.ForeignKey(Post, related_name='images', verbose_name='文章') is_cover = models.BooleanField('封面照片', default=False) caption = models.CharField('註解', blank=True, max_length=50) tag = models.CharField('書籤位置', blank=True, max_length=50) select_text = models.TextField('單品敘述', blank=True, null=True) img = fields.ThumbnailerImageField('圖片', upload_to=post_image_path, null=True, blank=True, help_text='橫幅照片尺寸為 640x450') video_url = models.CharField('Youtube 網址', max_length=255, blank=True, default='') video_id = models.CharField('Youtube ID', max_length=40, editable=False, blank=True, default='') def save(self, *args, **kwargs): if self.video_url: url_obj = urlparse.urlparse(self.video_url) if url_obj.netloc.lower() == 'www.youtube.com': self.video_id = urlparse.parse_qs(url_obj.query)['v'][0] elif url_obj.netloc.lower() == 'youtu.be': self.video_id = url_obj.path.strip('/') else: if self.video_id: self.video_id = '' super(Image, self).save(*args, **kwargs) def __unicode__(self): return '{post} - {id}'.format(post=self.post, id=self.id) def to_json(self): return dict(id=self.id, cover=self.is_cover, caption=self.caption, tag=self.tag, img=self.img.url if self.img else '', video_id=self.video_id) def generate_video_embed(self, width=600, height=450): return '<iframe width="{width}" height="{height}" ' \ 'src="https://www.youtube.com/embed/{video_id}" ' \ 'frameborder="0" allowfullscreen></iframe>'.format( width=width, height=height, video_id=self.video_id )
class Seminar(models.Model): # Seminar author = models.ForeignKey('auth.User', on_delete=models.CASCADE) title = models.CharField(max_length=200) text = models.TextField() thumbnail = fields.ThumbnailerImageField( upload_to='thumb', default='devkor_logo_mini.png', ) created_date = models.DateTimeField(default=timezone.now) file = models.FileField(upload_to='file', default=None) def __str__(self): return self.title
class Photo(models.Model): album = models.ForeignKey(Album, verbose_name='相簿', related_name='photos') caption = models.CharField('註解', max_length=20, blank=True) img = fields.ThumbnailerImageField('圖片', upload_to=album_image_path)
class Dispositivo(models.Model): """Cualquier elemento almacenado en la base de datos de inventario que puede ser entregado a una escuela. No debe existir una instancia de este modelo sin un objeto heredado del mismo. """ id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) triage = models.SlugField(unique=True, blank=True, editable=False) tipo = models.ForeignKey(DispositivoTipo, on_delete=models.CASCADE) entrada = models.ForeignKey(Entrada, on_delete=models.PROTECT, related_name='dispositivos') estado = models.ForeignKey(DispositivoEstado, on_delete=models.CASCADE, null=True, editable=False) etapa = models.ForeignKey(DispositivoEtapa, on_delete=models.PROTECT, null=True, editable=False) marca = models.ForeignKey(DispositivoMarca, on_delete=models.CASCADE, null=True, blank=True) modelo = models.ForeignKey(DispositivoModelo, on_delete=models.CASCADE, null=True, blank=True) serie = models.CharField(max_length=80, null=True, blank=True) codigo_qr = et_fields.ThumbnailerImageField(upload_to='qr_dispositivo', blank=True, null=True) class Meta: verbose_name = "Dispositivo" verbose_name_plural = "Dispositivos" indexes = [ models.Index(fields=['triage']), ] def __str__(self): return str(self.triage) def get_absolute_url(self): return self.cast().get_absolute_url() def cast(self): """Se encarga de obtener el dispositivo del modelo que ha heredado este objeto. Por ejemplo, el CPU-1, M-3, etc. """ for name in dir(self): try: attr = getattr(self, name) if isinstance(attr, self.__class__) and type(attr) != type(self): return attr except: pass def crear_qrcode(self): """Genera le código QR para apuntar a la id del dispositivo """ qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=6, border=1, ) qr.add_data(self.id) img = qr.make(fit=True) img = qr.make_image() buffer = BytesIO() img.save(buffer) filename = 'dispositivo-%s.png' % (self.id) filebuffer = InMemoryUploadedFile(buffer, None, filename, 'image/png', buffer.getbuffer().nbytes, None) self.codigo_qr.save(filename, filebuffer)