class PontoTuristicoSerializer(ModelSerializer): atracoes = AtracoesSerializer(many=True) endereco = EnderecoSerializer() comentarios = ComentarioSerializer(many=True) avaliacoes = AvaliacaoSerializer(many=True) descricao_completa_01 = SerializerMethodField() class Meta: model = PontoTuristico fields = ( 'id', 'nome', 'descricao', 'aprovado', 'atracoes', 'comentarios', 'avaliacoes', 'endereco', 'foto', 'descricao_completa_01', 'descricao_completa_02', ) def get_descricao_completa_01(self, obj): return '{0} - {1}'.format(obj.nome, obj.descricao)
class PontoTuristicoSerializer(ModelSerializer): atracoes = AtracaoSerializer(many=True) endereco = EnderecoSerializer(read_only=True) comentarios = ComentarioSerializer(many=True, read_only=True) avaliacoes = AvaliacaoSerializer(many=True, read_only=True) descricao_completa = SerializerMethodField() class Meta: model = PontoTuristico fields = ('id', 'nome', 'descricao', 'aprovado', 'foto', 'atracoes', 'comentarios', 'avaliacoes', 'endereco', 'descricao_completa', 'teste') ready_only_fields = {'comentarios', 'avaliacoes'} def cia_atracoes(self, atracoes, ponto): for atracao in atracoes: at = Atracao.objects.create(**atracao) ponto.atracoes.add(at) return def create(self, validated_data): atracoes = validated_data['atracoes'] del validated_data['atracoes'] ponto = PontoTuristico.opbjects.create(**validated_data) self.cia_atracoes(atracoes, ponto) return ponto def get_descricao_completa(self, obj): return '%s - %s ' % (obj.nome, obj.descricao)
class PontoTuristicoSerializer(ModelSerializer): Avaliacoes = AvaliacaoSerializer(many=True) Comentarios = ComentarioSerializer(many=True) atracoes = AtracaoSerializer(many=True) Endereco = EnderecoSerializer() descricao_completa = SerializerMethodField() class Meta: model = PontoTuristico fields = [ 'id', 'nome', 'descricao', 'aprovado', 'foto', # Foreign Keys/ManyToMany 'atracoes', 'Comentarios', 'Avaliacoes', 'Endereco', # Incluido do SerializerMethodField 'descricao_completa', ] def get_descricao_completa(self, obj): return '%s - %s' % (obj.nome, obj.descricao)
class PontoTuristicoSerializer(ModelSerializer): atracoes = AtracaoSerializer(many=True) comentarios = ComentarioSerializer(many=True) avaliacoes = AvaliacaoSerializer(many=True) enderecos = EnderecoSerializer() doc_identificacao = DocIdentificacaoSerializer() descricao_completa = SerializerMethodField(read_only=True) criado_em = DateTimeField(read_only=True, format="%d/%m/%Y %H:%M:%S") class Meta: model = PontoTuristico fields = ('id', 'nome', 'descricao', 'aprovado', 'foto', 'atracoes', 'comentarios', 'avaliacoes', 'enderecos', 'doc_identificacao', 'descricao_completa', 'criado_em') def cria_atracoes(self, atracoes, ponto): for atracao in atracoes: at = Atracao.objects.create(**atracao) ponto.atracoes.add(at) def cria_comentarios(self, comentarios, ponto): for comentario in comentarios: co = Comentario.objects.create(**comentario) ponto.comentarios.add(co) def cria_avaliacoes(self, avaliacoes, ponto): for avaliacao in avaliacoes: av = Avaliacao.objects.create(**avaliacao) ponto.avaliacoes.add(av) def create(self, validated_data): atracoes = validated_data['atracoes'] enderecos = validated_data['enderecos'] comentarios = validated_data['comentarios'] avaliacoes = validated_data['avaliacoes'] doc = validated_data['doc_identificacao'] del validated_data['atracoes'] del validated_data['enderecos'] del validated_data['comentarios'] del validated_data['avaliacoes'] del validated_data['doc_identificacao'] ponto = PontoTuristico.objects.create(**validated_data) self.cria_atracoes(atracoes, ponto) self.cria_comentarios(comentarios, ponto) self.cria_avaliacoes(avaliacoes, ponto) end = Endereco.objects.create(**enderecos) ponto.enderecos = end doci = DocIdentificacao.objects.create(**doc) ponto.doc_identificacao = doci ponto.save() return ponto def get_descricao_completa(self, obj): return '%s - %s' % (obj.nome, obj.descricao)
class PontoTuristicoSerializer(ModelSerializer): atracoes = AtracaoSerializer(many=True) comentarios = ComentarioSerializer(many=True) avaliacao = AvaliacaoSerializer(many=True) endereco = EnderecoSerializer(many=False) class Meta: model = PontoTuristico fields = ('id', 'nome', 'descricao', 'aprovado', 'foto', 'atracoes', 'comentarios', 'avaliacao', 'endereco',)
class PontoTuristicuSerializer(ModelSerializer): endereco = EnderecoSerializer() atracoes = AtracaoSerializer() comentarios = ComentarioSerializer() avaliacao = AvaliacaoSerializer(many=True) class Meta: model = PontosTuristicus fields = [ 'id', 'nome', 'descricao', 'avaliacao', 'atracoes', 'comentarios', 'avaliacao', 'endereco', 'foto' ]
class LugarSerializer(serializers.ModelSerializer): tag = TagsSerializer(many=True) comentario = ComentarioSerializer(many=True) class Meta: model = Lugar fields = [ 'id', 'nombre', 'descripcion', 'foto', 'calificacion', 'tag', 'email', 'sitio_web', 'telefono', 'redes', 'comentario', 'direccion', 'hora_abierto', 'hora_cerrado', 'dias_servicio', 'latitud', 'longitud', 'municipio', 'categoria', 'propietario', 'fecha_creacion', 'departamento', 'municipio' ]
class PontoTuristicoSerializer(ModelSerializer): atracoes = AtracaoSerializer(many=True) endereco = EnderecoSerializer() comentario = ComentarioSerializer(many=True) avaliacoes = AvaliacaoSerializer(many=True) descricao_completa = SerializerMethodField() class Meta: model = PontoTuristico fields = ('id', 'nome', 'descricao', 'aprovado', 'foto', 'atracoes', 'comentario', 'avaliacoes', 'endereco', 'descricao_completa', 'descricao_completa2') def get_descricao_completa(selfs, obj): return '%s - %s' % (obj.nome, obj.descricao)
class PontoTuristicoSerializer(ModelSerializer): atracoes = AtracaoSerializer(many=True, read_only=True) comentarios = ComentarioSerializer(many=True, read_only=True) class Meta: model = PontoTuristico fields = ( "ponto_turistico_id", "nome", "descricao", "aprovado", "foto", "atracoes", "comentarios", )
class PontoTuristicoSerializer(serializers.ModelSerializer): atracoes = RecursoSerializer(many=True) avaliacoes = AvaliacaoSerializer(many=True) comentarios = ComentarioSerializer(many=True) endereco = EnderecoSerializer() descricao_completa = SerializerMethodField() class Meta: model = PontoTuristico fields = '__all__' extra_fields = ['descricao_completa',] def get_descricao_completa(self, obj): return '%s -> %s' % (obj.nome, obj.descricao)
class PontosSerializer(ModelSerializer): atracoes = AtracoesSerializer( many=True) #many = True usa quando for relação m2m comentario = ComentarioSerializer(many=True) avaliacao = AvaliacaoSerializer(many=True) des_completa = SerializerMethodField( ) #preciso criar isso aqui para criar o metodo dentro do serialzier class Meta: model = Pontos fields = ('id', 'nome', 'descricao', 'status', 'foto', 'atracoes', 'comentario', 'avaliacao', 'des_completa', 'des_completa2') def get_des_completa(self, obj): #objeto é o proprio serializer return '%s - %s' % (obj.nome, obj.descricao)
class PontoTuristicoSerializer(ModelSerializer): atracoes = AtracaoSerializer(many=True, read_only=True) endereco = EnderecoSerializer() comentarios = ComentarioSerializer(many=True) doc_identificacao = DocIdentificacaoSerializer() descricao_completa = SerializerMethodField() class Meta: model = PontoTuristico fields = ('id', 'nome', 'descricao', 'aprovado', 'foto', 'atracoes', 'comentarios', 'avaliacoes', 'endereco', 'descricao_completa', 'descricao_completa2', 'doc_identificacao') read_only_fields = ['avaliacoes'] def cria_comentarios(self, comentarios, ponto): for comentario in comentarios: comment = Comentario.objects.create(**comentario) ponto.comentarios.add(comment) def create(self, validated_data): comentarios = validated_data['comentarios'] del validated_data['comentarios'] endereco = validated_data['endereco'] del validated_data['endereco'] doc = validated_data['doc_identificacao'] del validated_data['doc_identificacao'] doci = DocIdentificacao.objects.create(**doc) ponto = PontoTuristico.objects.create(**validated_data) self.cria_comentarios(comentarios, ponto) end = Endereco.objects.create(**endereco) ponto.endereco = end ponto.doc_identificacao = doci ponto.save() return ponto def get_descricao_completa(self, obj): return '%s - %s' % (obj.nome, obj.descricao)
class PontoTuristicoSerializer(ModelSerializer): atracoes = AtracaoSerializer(many=True) endereco = EnderecoSerializer() comentario = ComentarioSerializer(many=True) avaliacoes = AvaliacaoSerializer(many=True) documento = DocumentoSerializer() descricao_completa = SerializerMethodField() class Meta: model = PontoTuristico fields = ('id', 'nome', 'descricao', 'aprovado', 'foto', 'atracoes', 'comentario', 'avaliacoes', 'endereco', 'descricao_completa', 'descricao_completa2', 'documento') read_only_fileds = ('comentarios', 'avaliacoes') def cria_atracoes(self, atracoes, ponto): for atracao in atracoes: at = Atracao.objects.create(**atracao) ponto.atracoes.add(at) def create(self, validated_data): atracoes = validated_data['atracoes'] del validated_data['atracoes'] endereco = validated_data['endereco'] del validated_data['endereco'] ponto = PontoTuristico.objects.create(**validated_data) self.cria_atracoes(atracoes, ponto) end = Endereco.objects.create(**endereco) ponto.endereco = end doc = validated_data['documento'] del validated_data['documento'] doci = Documento.objects.create(**doc) ponto.documento = doci ponto.save() return ponto def get_descricao_completa(self, obj): return '%s - %s' % (obj.nome, obj.descricao)
class PontoTuristicoSerializer(ModelSerializer): atracoes = AtracaoSerializer(many=True) avaliacoes = AvaliacaoSerializer(many=True, read_only=True) comentarios = ComentarioSerializer(many=True, read_only=True) endereco = EnderecoSerializer(many=False) descricao_completa = SerializerMethodField() class Meta: model = PontoTuristico fields = ('id', 'nome', 'descricao', 'aprovado', 'foto', 'atracoes', 'comentarios', 'avaliacoes', 'endereco', 'descricao_completa') # ready_only_fields = ('comentarios', 'avaliacoes', 'atracoes') def create_endereco(self, endereco, ponto): novo_endereco = Endereco.objects.create(**endereco) ponto.endereco = novo_endereco def create_atracoes(self, atracoes, ponto): for atracao in atracoes: at = Atracao.objects.create(**atracao) ponto.atracoes.add(at) def create(self, validated_data): atracoes = validated_data['atracoes'] del validated_data['atracoes'] endereco = validated_data['endereco'] del validated_data['endereco'] ponto = PontoTuristico.objects.create(**validated_data) self.create_atracoes(atracoes, ponto) self.create_endereco(endereco, ponto) return ponto def get_descricao_completa(self, obj): return '{}: {}'.format(obj.nome, obj.descricao)
class PontoTuristicosSerializer(serializers.ModelSerializer): atracoes = AtracaoSerializer(many=True) comentarios = ComentarioSerializer(many=True) avaliacoes = AvaliacaoSerializer(many=True) endereco = EnderecoSerializer(many=False) doc_identificacao = DocIdentificacaoSerializer(many=False) type1 = serializers.PrimaryKeyRelatedField( queryset=TypeTest.objects.filter(type='Luis').distinct()) type2 = serializers.PrimaryKeyRelatedField( queryset=TypeTest.objects.filter(type='Jose').distinct()) class Meta: model = PontoTuristicos fields = ('id', 'name', 'description', 'aprovado', 'photo', 'atracoes', 'type1', 'type2', 'comentarios', 'avaliacoes', 'endereco', 'doc_identificacao') read_only_fields = ('comentarios', 'avaliacoes', 'endereco') def create_relations_many_to_many(self, ponto, *args, **kwargs): models = [Atracoes, Comentarios, Avaliacoes] campos_pk = [ponto.atracoes, ponto.comentarios, ponto.avaliacoes] relations = list(zip(models, campos_pk, args[0])) if args.__len__() > 0: for rel in relations: at = rel[0].objects.create(**rel[2][0]) rel[1].add(at) def create_relations_one_to_one(self, _field_one_to_one, *args, **kwargs): _data_one = [] for one_to_one in _field_one_to_one: _data_one.append(args[0][one_to_one]) del args[0][one_to_one] ponto = PontoTuristicos models = [Endereco, DocIdentificacao] campos_pk = [ponto.endereco, ponto.doc_identificacao] relations = list(zip(models, campos_pk, _data_one, _field_one_to_one)) ponto = PontoTuristicos.objects.create(**args[0]) if args.__len__() > 0: for rel in relations: rel_list = list(rel) if rel[2] is None: _relation_data = rel_list[0].objects.create() if rel[3] == 'endereco': ponto.endereco = _relation_data elif rel[3] == 'doc_identificacao': ponto.doc_identificacao = _relation_data ponto.save() else: _field = rel[2] _relation_data = rel_list[0].objects.create(**_field) if rel[3] == 'endereco': ponto.endereco = _relation_data elif rel[3] == 'doc_identificacao': ponto.doc_identificacao = _relation_data ponto.save() return ponto def create(self, validated_data): _field_many_to_many = ['atracoes', 'comentarios', 'avaliacoes'] _field_one_to_one = ['endereco', 'doc_identificacao'] ponto = PontoTuristicos _data_many = [] _data_one = [] for many_to_many in _field_many_to_many: _data_many.append(validated_data[many_to_many]) del validated_data[many_to_many] if _field_one_to_one.__len__() > 1: ponto = self.create_relations_one_to_one(_field_one_to_one, validated_data) else: endereco = validated_data[str(_field_one_to_one[0])] del validated_data[str(_field_one_to_one[0])] one_to_one_model_field = Endereco.objects.create(**endereco) ponto = ponto.objects.create(**validated_data) ponto.endereco = one_to_one_model_field ponto.save() self.create_relations_many_to_many(ponto, _data_many) return ponto
class PontoTuristicoSerializer(ModelSerializer): avaliacoes = AvaliacaoSerializer(many=True) identi = IdentificaocaSerializer() endereco = EnderecoSerializer() atracoes = AtracaoSerializer(many=True) comentarios = ComentarioSerializer(many=True) descricao_completa = SerializerMethodField() # read_only_field = ('avaliacoes', ) class Meta: model = PontoTuristico fields = ['id', 'nome', 'descricao', 'aprovado', 'foto', 'atracoes', 'avaliacoes', 'comentarios', 'endereco', 'descricao_completa', 'identi' ] def cria_avaliacoes(self, avaliacoes, ponto): for avaliacao in avaliacoes: av = Avaliacao.objects.create(**avaliacao) ponto.avaliacoes.add(av) def cria_atracoes(self, atracoes, ponto): for atracao in atracoes: at = Atracao.objects.create(**atracao) ponto.atracoes.add(at) def create(self, validated_data): atracoes = validated_data['atracoes'] del validated_data['atracoes'] avaliacoes = validated_data['avaliacoes'] del validated_data['avaliacoes'] comentarios = validated_data['comentarios'] del validated_data['comentarios'] endereco = validated_data['endereco'] del validated_data['endereco'] doc = validated_data['identi'] del validated_data['identi'] ponto = PontoTuristico.objects.create(**validated_data) self.cria_atracoes(atracoes, ponto) self.cria_avaliacoes(avaliacoes, ponto) doci = Identificacao.objects.create(**doc) end = Endereco.objects.create(**endereco) ponto.comentarios.set(comentarios) # ponto.avaliacoes.set(avaliacoes) ponto.endereco = end ponto.identi = doci ponto.save() return ponto def get_descricao_completa(self, obj): return '%s -- %s' % (obj.nome, obj.descricao)
class PontoTuristicoSerializer(ModelSerializer): atracoes = AtracaoSerializer(many=True, required=False) comentarios = ComentarioSerializer(many=True, required=False) avaliacaoes = AvaliacaoSerializer(many=True, required=False) endereco = EnderecoSerializer(required=False) docIdentificacao = DocIdentificacaoSerializer() # Para colocar informacoes calculadas ou que não estejam no MODEL usamos # SerializerMethodField. É preciso que o método tenha o nome do campo # iniciado pelo prefixo get_nome_do_campo(self, obj) # Exemplo mostra descricao completa = titulo + descricao descricao_completa = SerializerMethodField() class Meta: model = PontoTuristico fields = ("id", "nome", "descricao", "aprovado", "photo", "atracoes", "comentarios", "avaliacaoes", "endereco", "docIdentificacao", "descricao_completa", "exemplo_regra_neg") def create(self, validated_data): # Armazer as relações em listas separadas, copiadas por valor, # Para sem processadas e salvas separadamente avalicao_flag = False atracao_flag = False comentario_flag = False endereco_flag = False doc_flag = False lista_de_atracoes = [] lista_de_comentarios = [] lista_de_avalicoes = [] endereco = "" end = "" docId = None doc = None if "endereco" in validated_data: endereco = validated_data["endereco"] endereco_flag = True del validated_data["endereco"] if "atracoes" in validated_data: lista_de_atracoes = validated_data["atracoes"] atracao_flag = True del validated_data["atracoes"] if "comentarios" in validated_data: lista_de_comentarios = validated_data["comentarios"] comentario_flag = True del validated_data["comentarios"] if "avaliacaoes" in validated_data: lista_de_avalicoes = validated_data["avaliacaoes"] avalicao_flag = True del validated_data["avaliacaoes"] if "docIdentificacao" in validated_data: docId = validated_data["docIdentificacao"] doc_flag = True del validated_data["docIdentificacao"] # Remove as relacoes de dentro do mapa para poder salvar # pontos turisticos pelo metodo direto do framework # if atracao_flag: # del validated_data["atracoes"] # if comentario_flag: # del validated_data["comentarios"] # if avalicao_flag: # del validated_data["avaliacaoes"] # if endereco_flag: # del validated_data["endereco"] # print("Endereco removido do validated...") #salva ponto turistico pontoTuristico = PontoTuristico.objects.create(**validated_data) if atracao_flag: self.cria_atracoes(lista_de_atracoes, pontoTuristico) if comentario_flag: self.cria_comentarios(lista_de_comentarios, pontoTuristico) if avalicao_flag: self.cria_avaliacoes(lista_de_avalicoes, pontoTuristico) if endereco_flag: end = Endereco.objects.create(**endereco) pontoTuristico.endereco = end if doc_flag: doc = DocIdentificacao.objects.create(**docId) pontoTuristico.docIdentificacao = doc pontoTuristico.save() return pontoTuristico def cria_atracoes(self, atracoes, pontoTuristico): for atracao in atracoes: at = Atracao.objects.create(**atracao) pontoTuristico.atracoes.add(at) def cria_comentarios(self, comentarios, pontoTuristico): for comentario in comentarios: com = Comentario.objects.create(**comentario) pontoTuristico.comentarios.add(com) def cria_avaliacoes(self, avaliacoes, pontoTuristico): for avaliacao in avaliacoes: av = Avaliacao.objects.create(**avaliacao) pontoTuristico.avaliacaoes.add(av) # obj representa o modelo que está sendo tratado nesse serializer def get_descricao_completa(self, obj): return "%s - %s" % (obj.nome, obj.descricao)
class EventoSerializer(WritableNestedModelSerializer): class Meta: model = Evento fields = [ 'id', 'nombre', 'descripcion', 'lugar', 'comentario', 'direccion', 'foto', 'calificacion', 'tipo', 'fecha_inicio', 'fecha_fin', 'hora_inicio', 'hora_fin', 'finalizado', ] comentario = ComentarioSerializer(many=True) def create(self, validated_data): nombre = validated_data.get('nombre') descripcion = validated_data.get('descripcion') lugar = validated_data.get('lugar') comentario = validated_data.get('comentario') direccion = validated_data.get('direccion') foto = validated_data.get('foto') calificacion = validated_data.get('calificacion') tipo = validated_data.get('tipo') fecha_inicio = validated_data.get('fecha_inicio') fecha_fin = validated_data.get('fecha_fin') hora_inicio = validated_data.get('hora_inicio') hora_fin = validated_data.get('hora_fin') finalizado = validated_data.get('finalizado') self.push_notify(nombre_lugar=lugar.nombre, nombre_evento=nombre, id_lugar=lugar.id) evento = Evento.objects.create( nombre=nombre, descripcion=descripcion, lugar=lugar, direccion=direccion, foto=foto, calificacion=calificacion, tipo=tipo, fecha_inicio=fecha_inicio, fecha_fin=fecha_fin, hora_inicio=hora_inicio, hora_fin=hora_fin, finalizado=finalizado, ) evento.comentario.set(comentario) return evento def push_notify(self, nombre_lugar, nombre_evento, id_lugar): from pusher_push_notifications import PushNotifications pn_client = PushNotifications( instance_id='150ee5d4-aa83-42f8-9c65-fe6ab983f0ca', secret_key= 'FA39827AAB5E866F8084A0FD034F5CB59D987D566D35ED66BBEEA1564D561E93', ) message = nombre_lugar + ' ha creado el evento ' + nombre_evento interest = str(id_lugar) response = pn_client.publish(interests=[interest], publish_body={ 'apns': { 'aps': { 'alert': 'Hello!' } }, 'fcm': { 'notification': { 'title': 'Nuevo Evento', 'body': message } } }) print(response['publishId'])