From d2a79c6823ca59229597a49960817d23cd8a8a24 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Wed, 17 Sep 2014 20:40:38 -0300 Subject: [PATCH] Ajuste de warnings do Django 1.7: metodos renomeados p get_queryset --- sigi/apps/casas/admin.py | 60 +++++++++++++++--------------- sigi/apps/casas/models.py | 66 ++++++++++++++++----------------- sigi/apps/contatos/admin.py | 6 +-- sigi/apps/convenios/admin.py | 22 +++++------ sigi/apps/diagnosticos/forms.py | 4 +- sigi/apps/ocorrencias/admin.py | 4 +- sigi/apps/servicos/models.py | 62 +++++++++++++++---------------- 7 files changed, 112 insertions(+), 112 deletions(-) diff --git a/sigi/apps/casas/admin.py b/sigi/apps/casas/admin.py index 0e2c3d2..27ff3c4 100644 --- a/sigi/apps/casas/admin.py +++ b/sigi/apps/casas/admin.py @@ -38,12 +38,12 @@ class PresidenteInline(admin.StackedInline): class FuncionariosInline(admin.StackedInline): model = Funcionario fieldsets = ((None, { - 'fields': (('nome', 'sexo', 'nota', 'email'), ('cargo', 'funcao', 'setor', 'tempo_de_servico'), 'ult_alteracao') + 'fields': (('nome', 'sexo', 'nota', 'email'), ('cargo', 'funcao', 'setor', 'tempo_de_servico'), 'ult_alteracao') }),) - readonly_fields = ('ult_alteracao',) + readonly_fields = ('ult_alteracao',) extra = 1 inlines = (TelefonesInline,) - def queryset(self, request): + def get_queryset(self, request): return self.model.objects.exclude(cargo="Presidente") @@ -68,23 +68,23 @@ class ConveniosInline(admin.StackedInline): return '
'.join(['%s' % (a.arquivo.url, a.__unicode__()) for a in obj.anexo_set.all()]) get_anexos.short_description = 'Anexos' get_anexos.allow_tags = True - + def get_equipamentos(self, obj): return '
'.join([e.__unicode__() for e in obj.equipamentoprevisto_set.all()]) get_equipamentos.short_description = 'Equipamentos previstos' get_equipamentos.allow_tags = True - + def link_convenio(self, obj): if obj.pk is None: return "" from django.core.urlresolvers import reverse url = reverse('admin:%s_%s_change' %(obj._meta.app_label, obj._meta.module_name), args=[obj.pk] ) url = url + '?_popup=1' - return """ - + return """ + Editar """ % (obj.pk, obj.pk, url) - + link_convenio.short_description = 'Editar convenio' link_convenio.allow_tags = True @@ -93,18 +93,18 @@ class LegislaturaInline(admin.TabularInline): model = Legislatura fields = ['numero', 'data_inicio', 'data_fim', 'data_eleicao', 'total_parlamentares', 'link_parlamentares',] readonly_fields = ['link_parlamentares',] - + def link_parlamentares(self, obj): if obj.pk is None: return "" from django.core.urlresolvers import reverse url = reverse('admin:%s_%s_change' %(obj._meta.app_label, obj._meta.module_name), args=[obj.pk] ) url = url + '?_popup=1' - return """ - + return """ + Editar """ % (obj.pk, obj.pk, url) - + link_parlamentares.short_description = 'Parlamentares' link_parlamentares.allow_tags = True @@ -116,17 +116,17 @@ class DiagnosticoInline(admin.TabularInline): extra = 0 max_num = 0 can_delete = False - + def link_diagnostico(self, obj): if obj.pk is None: return "" from django.core.urlresolvers import reverse url = reverse('admin:%s_%s_change' %(obj._meta.app_label, obj._meta.module_name), args=["%s.pdf" % obj.pk] ) - return """ - + return """ + Abrir PDF """ % (obj.pk, obj.pk, url) - + link_diagnostico.short_description = 'Ver PDF' link_diagnostico.allow_tags = True @@ -192,44 +192,44 @@ class CasaLegislativaAdmin(admin.ModelAdmin): return '' get_convenios.short_description = u'Convênios' get_convenios.allow_tags= True - + def changelist_view(self, request, extra_context=None): return super(CasaLegislativaAdmin, self).changelist_view( request, extra_context={'query_str': '?' + request.META['QUERY_STRING']} ) - + def lookup_allowed(self, lookup, value): return super(CasaLegislativaAdmin, self).lookup_allowed(lookup, value) or \ lookup in ['municipio__uf__codigo_ibge__exact', 'convenio__projeto__id__exact'] - - def etiqueta(self,request,queryset): + + def etiqueta(self,request,queryset): return labels_report(request,queryset=queryset) etiqueta.short_description = "Gerar etiqueta(s) da(s) casa(s) selecionada(s)" - def etiqueta_sem_presidente(self,request,queryset): + def etiqueta_sem_presidente(self,request,queryset): return labels_report_sem_presidente(request,queryset=queryset) etiqueta_sem_presidente.short_description = "Gerar etiqueta(s) sem presidente da(s) casa(s) selecionada(s)" - def relatorio(self,request,queryset): + def relatorio(self,request,queryset): return report(request,queryset=queryset) relatorio.short_description = u"Exportar a(s) casa(s) selecionada(s) para PDF" - def relatorio_completo(self,request,queryset): + def relatorio_completo(self,request,queryset): return report_complete(request,queryset=queryset) relatorio_completo.short_description = u"Gerar relatório completo da(s) casa(s) selecionada(s)" - def relatorio_csv(self,request,queryset): - return export_csv(request) + def relatorio_csv(self,request,queryset): + return export_csv(request) relatorio_csv.short_description = u"Exportar casa(s) selecionada(s) para CSV" - + def adicionar_casas(self, request, queryset): if 'carrinho_casas' in request.session: #if request.session.has_key('carrinho_casas'): q1 = len(request.session['carrinho_casas']) else: - q1 = 0 + q1 = 0 response = adicionar_casas_carrinho(request,queryset=queryset) q2 = len(request.session['carrinho_casas']) quant = q2 - q1 @@ -238,10 +238,10 @@ class CasaLegislativaAdmin(admin.ModelAdmin): else: self.message_user(request,"As Casas Legislativas selecionadas já foram adicionadas anteriormente" ) return HttpResponseRedirect('.') - + adicionar_casas.short_description = u"Armazenar casas no carrinho para exportar" - - + + def get_actions(self, request): actions = super(CasaLegislativaAdmin, self).get_actions(request) if 'delete_selected' in actions: diff --git a/sigi/apps/casas/models.py b/sigi/apps/casas/models.py index 1ef1111..7504160 100644 --- a/sigi/apps/casas/models.py +++ b/sigi/apps/casas/models.py @@ -52,7 +52,7 @@ class CasaLegislativa(models.Model): help_text='Avenida, rua, praça, jardim, parque...' ) bairro = models.CharField(max_length=100, blank=True) - + municipio = models.ForeignKey( 'contatos.Municipio', verbose_name='município' @@ -84,7 +84,7 @@ class CasaLegislativa(models.Model): unique_together = ('municipio', 'tipo') verbose_name = 'Casa Legislativa' verbose_name_plural = 'Casas Legislativas' - + @property def num_parlamentares(self): if not self.legislatura_set.exists(): @@ -113,7 +113,7 @@ class CasaLegislativa(models.Model): return self.funcionario_set.get(setor='presidente') except Funcionario.DoesNotExist: return None - + @property def total_parlamentares(self): """ @@ -122,18 +122,18 @@ class CasaLegislativa(models.Model): - num_parlamentares ou - 0 se não tiver nenhuma das informações """ - + if self.legislatura_set.exists(): return self.legislatura_set.all()[0].total_parlamentares - + if self.num_parlamentares is not None: return self.num_parlamentares - + return 0 def gerarCodigoInterlegis(self): codigo = self.codigo_interlegis - + if codigo == '': if self.tipo.sigla == 'AL': # Assembléias são tratadas a parte codigo = 'A' + self.municipio.uf.sigla @@ -143,41 +143,41 @@ class CasaLegislativa(models.Model): self.save() return codigo # Se já existe, então trata a Assembleia como uma Casa qualquer. - + cityName = normalize('NFKD', unicode(self.municipio.nome)).encode('ascii','ignore') cityName = cityName.upper().strip() cityName = cityName.replace(' DA ',' ') cityName = cityName.replace(' DE ',' ') cityName = cityName.replace(' DO ',' ') - + # estratégia 1 - Pegar as 1ª letra de cada nome da cidade codigo = ''.join([x[0] for x in cityName.split(' ')[:3]]) - + # Se o código ficou com menos que três letras, pegar as 2 primeiras if len(codigo) < 3: codigo = ''.join([x[0:2] for x in cityName.split(' ')[:3]])[:3] - + # Se ainda ficou com menos de três letras, então o nome da cidade só # tem uma palavra. Pegue as três primeiras letras da palavra if len(codigo) < 3: codigo = cityName[:3] - + # Se o código já existir, substituir a última letra do código pela # última letra do nome da cidade, e ir recuando, letra a letra, # até achar um novo código. - + cityName = cityName.replace(' ', '') ultima = len(cityName) - + while CasaLegislativa.objects.filter(codigo_interlegis=codigo). \ count() > 0 and ultima > 0: codigo = codigo[:2] + cityName[ultima - 1: ultima] ultima -= 1 - + # Se usou todas as letras do nome na última posição e ainda assim # não gerou um código único, então vamos compor o nome usando as # três primeiras consoantes. - + if CasaLegislativa.objects.filter(codigo_interlegis=codigo).count() > 0: codigo_cons = cityName.replace('A','').replace('E','').\ replace('I','').replace('O','').replace('U','')[:3] @@ -187,18 +187,18 @@ class CasaLegislativa(models.Model): # Se ainda não gerou um nome único, vamos colocar dígitos no # último caractere, de A a Z - + i = 'A' - + while CasaLegislativa.objects.filter(codigo_interlegis=codigo). \ count() > 0 and i <= 'Z': codigo = codigo[:2] + str(i) i = chr(ord(i) + 1) - + # Se não encontrou, comece a gerar strings com 3 letras aleatórias # tiradas do nome da cidade, até gerar uma que não existe. Tentar # 100 vezes apenas - + i = 0 while CasaLegislativa.objects.filter(codigo_interlegis=codigo). \ @@ -206,28 +206,28 @@ class CasaLegislativa(models.Model): codigo = random.choice(cityName) + random.choice(cityName) + \ random.choice(cityName) i += 1 - + # Caramba! Só resta então gerar o código com 3 letras aleatórias # quaisquer do alfabeto! - + i = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' while CasaLegislativa.objects.filter(codigo_interlegis=codigo). \ count() > 0: codigo = random.choice(i) + random.choice(i) + \ random.choice(i) - + self.codigo_interlegis = codigo self.save() - + return codigo def __unicode__(self): return self.nome - + def save(self, *args, **kwargs): address_changed = False - + if self.pk is not None: original = CasaLegislativa.objects.get(pk=self.pk) if (self.logradouro != original.logradouro or @@ -237,17 +237,17 @@ class CasaLegislativa(models.Model): address_changed = True else: address_changed = True - + if address_changed: self.ult_alt_endereco = datetime.now() - + return super(CasaLegislativa, self).save(*args, **kwargs) class Funcionario(models.Model): """ Modelo para registrar contatos vinculados às Casas Legislativas """ - + SETOR_CHOICES = [ ("presidente","Presidente"), ("contato_interlegis","Contato Interlegis"), @@ -264,7 +264,7 @@ class Funcionario(models.Model): ("M", "Masculino"), ("F", "Feminino") ] - + casa_legislativa = models.ForeignKey(CasaLegislativa) nome = models.CharField('nome completo', max_length=60, blank=False) # nome.alphabetic_filter = True @@ -277,7 +277,7 @@ class Funcionario(models.Model): funcao = models.CharField(u'função', max_length=100, null=True, blank=True) setor = models.CharField(max_length=100, choices = SETOR_CHOICES, default="outros") tempo_de_servico = models.CharField(u'tempo de serviço', max_length=50, null=True, blank=True) - ult_alteracao = models.DateTimeField(u'Última alteração', null=True, blank=True, editable=True, auto_now=False) + ult_alteracao = models.DateTimeField(u'Última alteração', null=True, blank=True, editable=True, auto_now=False) class Meta: ordering = ('nome',) @@ -288,8 +288,8 @@ class Funcionario(models.Model): return self.nome class PresidenteManager(models.Manager): - def get_query_set(self): - qs = super(PresidenteManager, self).get_query_set() + def get_queryset(self): + qs = super(PresidenteManager, self).get_queryset() qs = qs.filter(setor='presidente') return qs diff --git a/sigi/apps/contatos/admin.py b/sigi/apps/contatos/admin.py index f2b2f68..d6476ff 100644 --- a/sigi/apps/contatos/admin.py +++ b/sigi/apps/contatos/admin.py @@ -12,15 +12,15 @@ class UnidadeFederativaAdmin(admin.ModelAdmin): list_display_links = ('codigo_ibge', 'nome') list_filter = ('regiao', 'populacao', PopulationFilter,) search_fields = ('search_text', 'codigo_ibge', 'sigla', 'regiao') - queryset = queryset_ascii + get_queryset = queryset_ascii class MunicipioAdmin(admin.ModelAdmin): actions = None - list_display = ('codigo_ibge', 'codigo_tse', 'nome', 'uf', 'is_capital', 'populacao', 'is_polo', 'idh', 'pib_ano', + list_display = ('codigo_ibge', 'codigo_tse', 'nome', 'uf', 'is_capital', 'populacao', 'is_polo', 'idh', 'pib_ano', 'pib_total', 'pib_percapita') list_display_links = ('codigo_ibge', 'codigo_tse', 'nome') list_filter = ('is_capital', 'is_polo', 'idh', 'populacao', 'uf', ) - queryset = queryset_ascii + get_queryset = queryset_ascii fieldsets = ( (None, { 'fields': ('codigo_ibge', 'codigo_tse', 'codigo_mesorregiao', diff --git a/sigi/apps/convenios/admin.py b/sigi/apps/convenios/admin.py index 2b74c67..aad5e10 100644 --- a/sigi/apps/convenios/admin.py +++ b/sigi/apps/convenios/admin.py @@ -59,10 +59,10 @@ class ConvenioAdmin(admin.ModelAdmin): #date_hierarchy = 'data_adesao' ordering = ('casa_legislativa__tipo__sigla','casa_legislativa__municipio__uf','casa_legislativa') raw_id_fields = ('casa_legislativa',) - queryset = queryset_ascii + get_queryset = queryset_ascii search_fields = ('id', 'search_text',#'casa_legislativa__nome', 'num_processo_sf','num_convenio') - + def get_uf(self, obj): return obj.casa_legislativa.municipio.uf.sigla get_uf.short_description = 'UF' @@ -77,7 +77,7 @@ class ConvenioAdmin(admin.ModelAdmin): del request.GET['data_retorno_assinatura__gte'] elif re.match('^\d*$', value): # Year only request.GET['data_retorno_assinatura__gte'] = "%s-01-01" % value #Complete with january 1st - elif re.match('^\d*\D\d*$', value): # Year and month + elif re.match('^\d*\D\d*$', value): # Year and month request.GET['data_retorno_assinatura__gte'] = '%s-01' % value #Complete with 1st day of month if 'data_retorno_assinatura__lte' in request.GET: value = request.GET.get('data_retorno_assinatura__lte','') @@ -85,27 +85,27 @@ class ConvenioAdmin(admin.ModelAdmin): del request.GET['data_retorno_assinatura__lte'] elif re.match('^\d*$', value): # Year only request.GET['data_retorno_assinatura__lte'] = "%s-01-01" % value #Complete with january 1st - elif re.match('^\d*\D\d*$', value): # Year and month + elif re.match('^\d*\D\d*$', value): # Year and month request.GET['data_retorno_assinatura__lte'] = '%s-01' % value #Complete with 1st day of month request.GET._mutable=False - + return super(ConvenioAdmin, self).changelist_view( request, extra_context={'query_str': '?' + request.META['QUERY_STRING']} ) def relatorio(self, request, queryset): - #queryset.order_by('casa_legislativa__municipio__uf') + #queryset.order_by('casa_legislativa__municipio__uf') response = HttpResponse(mimetype='application/pdf') report = ConvenioReport(queryset=queryset) report.generate_by(PDFGenerator, filename=response) - return response + return response relatorio.short_description = u'Exportar convênios selecionados para PDF' - - def adicionar_convenios(self, request, queryset): + + def adicionar_convenios(self, request, queryset): if request.session.has_key('carrinho_convenios'): q1 = len(request.session['carrinho_convenios']) else: - q1 = 0 + q1 = 0 adicionar_convenios_carrinho(request,queryset=queryset) q2 = len(request.session['carrinho_convenios']) quant = q2 - q1 @@ -115,7 +115,7 @@ class ConvenioAdmin(admin.ModelAdmin): self.message_user(request,"Os Convênios selecionados já foram adicionadas anteriormente" ) return HttpResponseRedirect('.') adicionar_convenios.short_description = u"Armazenar convênios no carrinho para exportar" - + def get_actions(self, request): actions = super(ConvenioAdmin, self).get_actions(request) if 'delete_selected' in actions: diff --git a/sigi/apps/diagnosticos/forms.py b/sigi/apps/diagnosticos/forms.py index 2cf91db..0f3e7f1 100644 --- a/sigi/apps/diagnosticos/forms.py +++ b/sigi/apps/diagnosticos/forms.py @@ -20,10 +20,10 @@ class DiagnosticoForm(BaseDynamicEntityForm): vinculando ao modelo Diagnostico """ model = Diagnostico - + def __init__(self, *args, **kwargs): super(DiagnosticoForm, self).__init__(*args, **kwargs) - + for k, f in self.fields.iteritems(): if isinstance(f, CharField): f.widget = forms.widgets.Textarea(attrs={'cols':'80'}) diff --git a/sigi/apps/ocorrencias/admin.py b/sigi/apps/ocorrencias/admin.py index 502d040..ca9e794 100644 --- a/sigi/apps/ocorrencias/admin.py +++ b/sigi/apps/ocorrencias/admin.py @@ -22,7 +22,7 @@ class ComentarioInline(admin.StackedInline): verbose_name, verbose_name_plural = u"Comentário novo", u"Comentários novos" fieldsets = ((None, {'fields': (('novo_status', 'encaminhar_setor',), 'descricao', )}),) - def queryset(self, queryset): + def get_queryset(self, queryset): return self.model.objects.get_query_set() @@ -42,7 +42,7 @@ class OcorrenciaChangeList(ChangeList): date_hierarchy, search_fields, list_select_related, list_per_page, list_max_show_all, list_editable, model_admin) - def get_query_set(self, request): + def get_queryset(self, request): tmp_params = self.params.copy() grupo = None if 'grupo' in self.params: diff --git a/sigi/apps/servicos/models.py b/sigi/apps/servicos/models.py index e43fb08..0cee2e5 100644 --- a/sigi/apps/servicos/models.py +++ b/sigi/apps/servicos/models.py @@ -11,13 +11,13 @@ class TipoServico(models.Model): {senha} para incluir a senha inicial do serviço''' nome = models.CharField(u'Nome', max_length=60) sigla = models.CharField(u'Sigla', max_length='12') - string_pesquisa = models.CharField(u'String de pesquisa', blank=True, max_length=200, + string_pesquisa = models.CharField(u'String de pesquisa', blank=True, max_length=200, help_text=u'Sufixo para pesquisa RSS para averiguar a data da última atualização do serviço') template_email_ativa = models.TextField(u'Template de email de ativação', help_text = email_help, blank=True) template_email_altera = models.TextField(u'Template de email de alteração', help_text = email_help, blank=True) template_email_desativa = models.TextField(u'Template de email de desativação', help_text = email_help + u'
{motivo} para incluir o motivo da desativação do serviço', blank=True) - - @property + + @property def qtde_casas_atendidas(self): u"""Quantidade de casas atendidas""" return self.servico_set.filter(data_desativacao=None).count() @@ -25,7 +25,7 @@ class TipoServico(models.Model): class Meta: verbose_name = u'Tipo de serviço' verbose_name_plural = u'Tipos de serviço' - + def __unicode__(self): return self.nome; @@ -44,13 +44,13 @@ class Servico(models.Model): data_alteracao = models.DateField(u'Data da última alteração', blank=True, null=True, auto_now=True) data_desativacao = models.DateField(u'Data de desativação', blank=True, null=True) motivo_desativacao = models.TextField(u'Motivo da desativação', blank=True) - data_ultimo_uso = models.DateField(u'Data da última utilização', blank=True, null=True, + data_ultimo_uso = models.DateField(u'Data da última utilização', blank=True, null=True, help_text=u'Data em que o serviço foi utilizado pela Casa Legislativa pela última vez
NÃO É ATUALIZADO AUTOMATICAMENTE!') - erro_atualizacao = models.CharField(u"Erro na atualização", blank=True, max_length=200, + erro_atualizacao = models.CharField(u"Erro na atualização", blank=True, max_length=200, help_text=u"Erro ocorrido na última tentativa de atualizar a data de último acesso") - + # casa_legislativa.casa_uf_filter = True - + def atualiza_data_uso(self): def reset(erro=u"", comment=u""): if self.data_ultimo_uso is None and not erro: @@ -63,17 +63,17 @@ class Servico(models.Model): if self.tipo_servico.string_pesquisa == "": reset() return - + url = self.url - + if not url: reset() return - + if url[-1] != '/': url += '/' url += self.tipo_servico.string_pesquisa - + import urllib2 from xml.dom.minidom import parseString @@ -85,17 +85,17 @@ class Servico(models.Model): opener = urllib2.build_opener(proxy) req = opener.open(fullurl=url, timeout=5) except Exception as e: - reset(erro=str(e), comment=u'Não foi possível conectar com o servidor. Pode estar fora do ar ou não ser um ' + + reset(erro=str(e), comment=u'Não foi possível conectar com o servidor. Pode estar fora do ar ou não ser um ' + self.tipo_servico.nome) return - + try: rss = req.read() except Exception as e: reset(erro=str(e), comment=u'Não foi possível receber os dados do servidor. O acesso pode ter sido negado.') return - try: + try: xml = parseString(rss) items = xml.getElementsByTagName('item') first_item = items[0] @@ -109,13 +109,13 @@ class Servico(models.Model): reset(erro=str(e), comment=u'A resposta do servidor não é compatível com %s. Pode ser outro software que está sendo usado' % self.tipo_servico.nome) return - + def __unicode__(self): return "%s (%s)" % (self.tipo_servico.nome, 'ativo' if self.data_desativacao is None else 'Desativado') - + def save(self, *args, **kwargs): # Reter o objeto original para verificar mudanças - + if self.id is not None: original = Servico.objects.get(id=self.id) @@ -139,36 +139,36 @@ class Servico(models.Model): # Salvar o Servico super(Servico, self).save(*args, **kwargs) return # sem enviar email - + # Prepara e envia o email body = body.replace('{url}', self.url) \ .replace('{senha}', self.senha_inicial) \ .replace('{motivo}', self.motivo_desativacao) - + # send_mail(subject, body, DEFAULT_FROM_EMAIL, \ # (self.contato_tecnico.email,), fail_silently=False) - + # Salvar o Servico super(Servico, self).save(*args, **kwargs) return - + class LogServico(models.Model): servico = models.ForeignKey(Servico, verbose_name='Serviço') descricao = models.CharField('Breve descrição da ação', max_length=60) data = models.DateField('Data da ação', default=date.today) log = models.TextField('Log da ação') - + def __unicode__(self): return "%s (%s)" % (self.descricao, self.data) - + class Meta: verbose_name = 'Log do serviço' - verbose_name_plural = 'Logs do serviço' + verbose_name_plural = 'Logs do serviço' class CasaAtendidaManager(models.Manager): - def get_query_set(self): - qs = super(CasaAtendidaManager, self).get_query_set() + def get_queryset(self): + qs = super(CasaAtendidaManager, self).get_queryset() qs = qs.exclude(codigo_interlegis='') return qs @@ -178,7 +178,7 @@ class CasaAtendida(CasaLegislativa): verbose_name_plural = 'Casas atendidas' objects = CasaAtendidaManager() - + class CasaManifesta(models.Model): casa_legislativa = models.OneToOneField(CasaLegislativa) data_manifestacao = models.DateTimeField(auto_now_add=True) @@ -186,13 +186,13 @@ class CasaManifesta(models.Model): informante = models.CharField(u'Nome do informante', max_length=100, blank=True) cargo = models.CharField(u'Cargo do informante', max_length=100, blank=True) email = models.EmailField(u'E-mail de contato', blank=True) - + class ServicoManifesto(models.Model): casa_manifesta = models.ForeignKey(CasaManifesta) servico = models.ForeignKey(TipoServico) url = models.URLField(blank=True) hospedagem_interlegis = models.BooleanField(u'Hospedagem no Interlegis?') - + class Meta: unique_together = ('casa_manifesta', 'servico') @@ -204,4 +204,4 @@ class RegistroServico(models.Model): data_registro = models.DateTimeField(auto_now=True) class Meta: - verbose_name_plural = u'Registro de serviços' \ No newline at end of file + verbose_name_plural = u'Registro de serviços'