Advertisement
phiron

Publicação e ManytoManyField

Sep 30th, 2015
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.46 KB | None | 0 0
  1. class Postagem(models.Model):
  2.     """
  3.    classe abstrata que serve de base para todo o tipo de publicação
  4.    """
  5.     nome=models.CharField("título",max_length=300)
  6.     chamada=models.TextField("chamada",max_length=600,blank=True)
  7.     publicado_em=models.DateTimeField("data publicação",auto_now_add=True)
  8.     atualizado_em=models.DateTimeField("data atualização",auto_now=True)
  9.     visivel=models.BooleanField("visível",default=True)
  10.     iniciativa=models.BooleanField('depoimento?',default=False,help_text="Marque se a publicação é um depoimento humanizado")
  11.     exclusivo=models.BooleanField('exclusivo?',default=False,help_text="Marque se a publicação é exclusiva de um hotsite")
  12.     usuario_criacao=models.ForeignKey(User,blank=True,null=True)
  13.     usuario_edicao=models.ForeignKey(User,null=True,related_name='editor%(app_label)s_%(class)s_related',blank=True)
  14.     slug=models.SlugField('atalho',max_length=300,blank=True,null=True,help_text="esse campo não precisa ser preenchido pelo usuário")
  15.     atividade=models.ForeignKey(Atividades,
  16.                                 blank=True,
  17.                                 null=True,
  18.                                 help_text="vincule esta postagem a alguma atividade")
  19.     tematica=models.ManyToManyField(
  20.                                     Tematica,blank=True,
  21.                                     #related_name='tematica%(app_label)s_%(class)s_related',
  22.                                     help_text="Classifique a publicação quanto à temática"
  23.                                     )
  24.     projeto=models.ManyToManyField(
  25.                             Projeto,
  26.                             blank=True,
  27.                             limit_choices_to={'visivel': True},
  28.                             related_name='projeto_%(class)s',
  29.                             help_text="Selecione os projetos a qual a publicação se relaciona"
  30.                             )
  31.     eixo=models.ManyToManyField(
  32.                                 Eixo,
  33.                                 blank=True,
  34.                                 limit_choices_to={'visivel': True},
  35.                                 related_name='eixo_%(class)s',
  36.                                 help_text="Selecione um ou mais institucional relacionados à publicação")
  37.     site = models.ManyToManyField(Site,blank = True)
  38.     objects = models.Manager()
  39.     on_site = CurrentSiteManager()
  40.  
  41.     def __str__(self):
  42.         """
  43.        retorna o nome do objeto
  44.        """
  45.         return self.nome
  46.     class Meta:
  47.         abstract=True
  48.  
  49. class Publicacao(Postagem):
  50.     """
  51.    Nessa Classe será colocadas as publicações institucionais, tais quais boletins, documentos em pdf, relatórios, etc.
  52.    As opções são:
  53.    - publicação: São os documentos tais como relatórios externos e outros que dizem respeito
  54.    - documento: São documentos como teses, monografias e outros produtos feitos pelos colaboradores dentro da instituição
  55.    - impresso: São os documentos impressos tais como boletins e jornais.
  56.    - Documentos e arquivos Institucionais ou institucional: São os arquivos para downloads e uso dos colaboradores\
  57.    a particularidade aqui é que esses documentos serão exibidos na tela principal, em arquivos abaixo do link institucional do rodapé.
  58.    colocaremos aqui coisas como formulários, memorandos, minutas para colaboradores e versões de programas.
  59.    """
  60.     arquivo=models.FileField(upload_to='publicacoes')
  61.     exclusivo_equipe = models.BooleanField("Exclusivo para equipe",default = False,
  62.                                     help_text = "arquivo exibido apenas a usuários 'logados' no sistema")
  63.     imagem = models.ImageField('logo',upload_to="publicacoes",
  64.                                blank=True,
  65.                                null=True)
  66.     tipo_publicacao = models.CharField('tipo publicação', max_length=200,choices=PUBLICACAO_CHOICES,
  67.                     help_text = "- publicação: São os documentos tais como relatórios externos e outros que dizem respeito\
  68.    - documento: São documentos como teses, monografias e outros produtos feitos pelos colaboradores dentro da instituição\
  69.    - impresso: São os documentos impressos tais como boletins e jornais.\
  70.    - Documentos e arquivos Institucionais ou institucional: São os arquivos para downloads e uso dos colaboradores \
  71.    a particularidade aqui é que esses documentos serão exibidos na tela principal, em arquivos abaixo do link institucional do rodapé.\
  72.    colocaremos aqui coisas como formulários, memorandos, minutas para colaboradores e versões de programas")
  73.     def tipo_documento(self):
  74.         """
  75.        define a extensão do documento
  76.        """
  77.         tipo = self.arquivo.name[-4:].lower()
  78.         if 'zip' in tipo:
  79.             return 'zip'
  80.         elif 'doc' in tipo or 'docx' in tipo:
  81.             return 'doc'
  82.         elif 'pdf' in tipo:
  83.             return 'pdf'
  84.     def get_absolute_url(self):
  85.         """
  86.        retorna a url da publicacao
  87.        """
  88.         return self.arquivo.url
  89.     class Meta:
  90.         verbose_name_plural = "publicações"
  91.         ordering = ['-publicado_em','-atualizado_em']
  92.  
  93. def save_site(signal,instance,sender,**kwargs):
  94.     """
  95.    Verificando se existe o site e caso não exista adiciono e salvo o model...
  96.    """
  97.     site = Site.objects.get_current()
  98.     m = sender.objects.get(id=instance.id)
  99.     if not site in m.site.all():
  100.         m.site.add(site)
  101.  
  102. signals.post_save.connect(save_site, sender = Publicacao)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement