Browse Source

Ajuste de warnings do Django 1.7: metodos renomeados p get_queryset

producao
Marcio Mazza 10 years ago
parent
commit
d2a79c6823
  1. 60
      sigi/apps/casas/admin.py
  2. 66
      sigi/apps/casas/models.py
  3. 6
      sigi/apps/contatos/admin.py
  4. 22
      sigi/apps/convenios/admin.py
  5. 4
      sigi/apps/diagnosticos/forms.py
  6. 4
      sigi/apps/ocorrencias/admin.py
  7. 62
      sigi/apps/servicos/models.py

60
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 '<br/>'.join(['<a href="%s" target="_blank">%s</a>' % (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 '<br/>'.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 """<input id="edit_convenio-%s" type="hidden"/>
<a id="lookup_edit_convenio-%s" href="%s" class="changelink" onclick="return showRelatedObjectLookupPopup(this)">
return """<input id="edit_convenio-%s" type="hidden"/>
<a id="lookup_edit_convenio-%s" href="%s" class="changelink" onclick="return showRelatedObjectLookupPopup(this)">
Editar
</a>""" % (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 """<input id="edit_legislatura-%s" type="hidden"/>
<a id="lookup_edit_legislatura-%s" href="%s" class="changelink" onclick="return showRelatedObjectLookupPopup(this)">
return """<input id="edit_legislatura-%s" type="hidden"/>
<a id="lookup_edit_legislatura-%s" href="%s" class="changelink" onclick="return showRelatedObjectLookupPopup(this)">
Editar
</a>""" % (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 """<input id="edit_diagnostico-%s" type="hidden"/>
<a id="lookup_edit_diagnostico-%s" href="%s" class="button" target="_blank">
return """<input id="edit_diagnostico-%s" type="hidden"/>
<a id="lookup_edit_diagnostico-%s" href="%s" class="button" target="_blank">
Abrir PDF
</a>""" % (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 '<ul>' + ''.join(['<li>%s</li>' % c.__unicode__() for c in obj.convenio_set.all()]) + '</ul>'
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:

66
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

6
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',

22
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:

4
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'})

4
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:

62
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'<br/>{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<br/><strong>NÃO É ATUALIZADO AUTOMATICAMENTE!</strong>')
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'
verbose_name_plural = u'Registro de serviços'

Loading…
Cancel
Save