1
Below is a screenshot of the registration screen where options for choices should appear
The low image containing the options that should appear in the image above
follows the model.py code
from django.contrib.gis.db import models
from djgeojson.fields import PointField
from django.contrib.gis.geos import Point
from django.contrib.gis.geos import GEOSGeometry
from django.contrib.gis.gdal import SpatialReference, CoordTransform
# from bdg import models as bdg_models
from django.contrib.gis.measure import D
import django_tables2 as tables
from sorl.thumbnail import ImageField
from rest_framework import serializers
from smart_selects.db_fields import ChainedManyToManyField
from django.contrib import messages
from django.shortcuts import render
from .thumbs import ImageWithThumbsField
from sorl_thumbnail_serializer.fields import HyperlinkedSorlImageField
from drf_dynamic_fields import DynamicFieldsMixin
from django.core.validators import FileExtensionValidator
import zipfile
class Causa(models.Model):
nome = models.CharField(max_length=250, null=True, blank=True)
def __str__(self):
return self.nome
class Consequencia(models.Model):
nome = models.CharField(max_length=250, null=True, blank=True)
def __str__(self):
return self.nome
class Feicao(models.Model):
# Opcoes Tipo
acesso_irregular = "Acesso irregular"
acumulo_sedimentos_pista = "Acumulo de sedimentos sobre a pista"
alagamento = "Alagamento"
assoreamento = "Assoreamento"
atropelamento_animais_silvestres = "Atropelamento de animais silvestres"
deslizamento = "Deslizamento"
erosao = "Erosão "
estrutura_abandonada = "Estrutura abandonada"
falta_de_vegetacao = "Falta de vegetação"
lixo_residuos_solidos = "Lixo e resíduos sólidos"
ocupacao_irregular = "Ocupação irregular"
outros = "Outros"
queda_bloco = "Queda de bloco"
recalque = "Recalque"
tipos_opcoes = (
(acesso_irregular, "Acesso irregular"),
(acumulo_sedimentos_pista, "Acumulo de sedimentos sobre a pista"),
(alagamento, "Alagamento"),
(assoreamento, "Assoreamento"),
(atropelamento_animais_silvestres, "Atropelamento de animais silvestres"),
(deslizamento, "Deslizamento"),
(erosao, "Erosão "),
(estrutura_abandonada, "Estrutura abandonada"),
(falta_de_vegetacao, "Falta de vegetação"),
(lixo_residuos_solidos, "Lixo e resíduos sólidos"),
(ocupacao_irregular, "Ocupação irregular"),
(outros, "Outros"),
(queda_bloco, "Queda de bloco"),
(recalque, "Recalque")
)
nome = models.CharField(max_length=50, choices=tipos_opcoes, blank=True, null=True)
causas = models.ManyToManyField(Causa)
consequencias = models.ManyToManyField(Consequencia)
def __str__(self):
return self.nome
class Meta:
verbose_name_plural = "Feições"
class Passivo(models.Model):
# Opcoes relevo
plano = 'PL'
ondulado = 'ON'
montanhoso = 'MO'
relevo_opcoes = (
(plano, 'Plano'),
(ondulado, 'Ondulado'),
(montanhoso, 'Montanhoso')
)
# Opcoes terceira_faixa_localizacao
lado_direito = 'LD'
lado_esquerdo = 'LE'
inexistente = 'IN'
ambos = 'AM'
terceira_faixa_localizacao_opcoes = (
(lado_direito, 'Lado Direito'),
(lado_esquerdo, 'Lado Esquerdo'),
(inexistente, 'Inexistente')
)
#opcoes pavimento
pavimento_asfautico = 'PA'
pavimento_concreto = 'PC'
nao_pavimentado = 'NP'
outro_pavimento = 'OP'
pista_rolamento_pavimento_opcoes = (
(pavimento_asfautico, 'Pavimento Asfaltico'),
(pavimento_concreto, 'Pavimento Concreto'),
(nao_pavimentado, 'Nao Pavimentado'),
(outro_pavimento, 'Outro Pavimento')
)
# opcoes lado
direito = 'D'
esquerdo = 'E'
indefinido = 'I'
ambos = 'A'
lado_opcoes = (
(direito, 'Direito'),
(esquerdo, 'Esquerdo'),
(indefinido, 'Indefinido'),
(ambos, 'Lado Direito e Esquerdo')
)
# Opcoes Perigo
sem_perigo = '0'
perigo_potencial = '1'
perigo_iminente = '2'
perigo_instalado = '3'
nivel_gravidade_escolhas = (
(sem_perigo, 'Sem Perigo'),
(perigo_potencial, 'Perigo Potencial'),
(perigo_iminente, 'Perigo Iminente'),
(perigo_instalado, 'Perigo Instalado' )
)
# MODELO
data_inspecao = models.DateField('Data de inspeção',auto_now=False)
# LOCALIZAÇÃO
latitude = models.DecimalField('Latitude', max_digits=14, decimal_places=10, blank=False, null=True)
longitude = models.DecimalField('Longitude', max_digits=14, decimal_places=10, blank=False, null=True)
km_ponto = models.DecimalField('Km', blank=True, null=True,max_digits=7, decimal_places=2)
lado = models.CharField('Lado de Ocorrência', blank=True, null=True,max_length=1,choices=lado_opcoes)
distancia_ao_eixo = models.CharField('Distância do Passivo ao Eixo',max_length=50,blank=True, null=True)
area_ocorrencia_faixa_dominio = models.NullBooleanField(blank=True, null=True, default=False)
area_ocorrencia_area_adjacente = models.NullBooleanField(blank=True, null=True, default=False)
# CARACTERIZAÇÃO DO SEGMENTO RODOVIÁRIO
largura_faixa_dominio_esquerda = models.DecimalField(max_digits=6, decimal_places=2, blank=True, null=True)
largura_faixa_dominio_direita = models.DecimalField(max_digits=6, decimal_places=2, blank=True, null=True)
pista_rolamento_numero = models.IntegerField('nº de pistas de rolamento', blank=True, null=True)
pista_rolamento_pavimento = models.CharField(max_length=50,
choices = pista_rolamento_pavimento_opcoes,
default = pavimento_asfautico)
acostamento_presenca = models.NullBooleanField('Acostamento', default=False)
terceira_faixa_localizacao = models.CharField('Terceira Faixa / Localização', max_length=50,
choices = terceira_faixa_localizacao_opcoes,
default = inexistente)
relevo = models.CharField(max_length=50,
choices = relevo_opcoes,
default = plano)
# CARACTERIZAÇÃO DO PASSIVO
# feicao = models.OneToOneField(Feicao, on_delete=models.CASCADE)
feicao = models.ForeignKey(Feicao, on_delete=models.DO_NOTHING)
dimensao_comprimento = models.DecimalField('Comprimento', max_digits=10, decimal_places=2,blank=True, null=True, default = None)
largura_faixa_dominio_total = models.DecimalField('Largura', max_digits=6, decimal_places=2, blank=True, null=True)
dimensao_profundidade = models.DecimalField('Profundidade', max_digits=10, decimal_places=2,blank=True, null=True, default = None)
risco_ao_usuario = models.CharField(max_length=50, choices = nivel_gravidade_escolhas, default = None, blank=True, null=True)
risco_ao_patrimonio = models.CharField(max_length=50, choices = nivel_gravidade_escolhas, default = None, blank=True, null=True)
risco_ao_ambiente = models.CharField(max_length=50, choices = nivel_gravidade_escolhas, default = None, blank=True, null=True)
possiveis_causas = ChainedManyToManyField(
Causa,
horizontal=True,
verbose_name='Possiveis Causas',
chained_field="feicao",
chained_model_field="feicao",
)
provaveis_consequencias = ChainedManyToManyField(
Consequencia,
horizontal=True,
verbose_name = 'Provaveis Consequências',
chained_field="feicao",
chained_model_field="feicao",
)
localizacao = models.PointField(blank=True, null=True)
modelo_3d = models.FileField(upload_to='models/',blank=True, null=True, validators=[FileExtensionValidator(allowed_extensions=['zip'])])
modelo_3d_path = models.CharField('Endereço do arquivo 3d (cloud.js)',max_length=128,blank=True, null=True)
croqui = models.ImageField('Croqui')
observacoes = models.TextField()
class Meta:
db_table = 'passivo'
class Foto(models.Model):
descricao = models.CharField('Descrição',max_length=300, blank=True, null=True, default = None)
image = ImageWithThumbsField(sizes=((100,130),(200,260)))
property = models.OneToOneField(Passivo,
related_name='fotos',
on_delete=models.CASCADE, null=True)#, default='no-img.png')
class Meta:
db_table = 'foto'
verbose_name_plural = "Fotos"
def __str__(self):
return ("Fotos do passivo")
class Local(models.Model):
descricao = models.CharField(max_length=55, blank=True, null=True)
fk_passivo_passivo = models.OneToOneField(Passivo,on_delete=models.CASCADE)
class Meta:
db_table = 'local'
Below follows the admin.py code
from django.contrib import admin
from django.apps import apps
from cadastramento.models import Feicao, Passivo, Causa, Consequencia, Foto
from sorl.thumbnail.admin import AdminImageMixin
import nested_admin
from leaflet.admin import LeafletGeoAdmin
class FotoInline(AdminImageMixin, admin.TabularInline):
model = Foto
extra = 0
class PassivoAdmin(AdminImageMixin,nested_admin.NestedModelAdmin):
model = Passivo
exclude = ['localizacao']
admin.site.register(Causa)
admin.site.register(Consequencia)
admin.site.register(Feicao)
admin.site.register(Passivo,PassivoAdmin)
These options were working, and it stopped working. I can’t remember if I’ve made any changes and you’ve caused this problem and I can’t find what should be done to make it work.