Пример #1
0
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
            )
Пример #2
0
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
Пример #3
0
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)
Пример #4
0
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)