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(serializers.ModelSerializer): attractions = serializers.StringRelatedField(many=True, read_only=True) address = EnderecoSerializer(many=False) complete_description = SerializerMethodField( ) # serve para retornar um campo customizado def get_complete_description(self, obj): return '%s - %s ' % (obj.name, obj.description) class Meta: model = PontoTuristico fields = [ 'id', 'name', 'photo', 'attractions', 'description', 'address', 'complete_description', 'complete_description2' ] def create(self, validated_data): address_data = validated_data.pop('address') address = Endereco.objects.create(**address_data) ponto_turistico = PontoTuristico.objects.create(address=address, **validated_data) return ponto_turistico
class PontoTuristicoSerializer(ModelSerializer): atracoes = AtracoesSerializer(many=True) endereco = EnderecoSerializer() doc_id = DocIdentificacaoSerializer() 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 ponto.save() return ponto class Meta: model = PontoTuristico fields = ('id', 'nome', 'status', 'descricacao', 'atracoes', 'comentarios', 'avaliacoes', 'endereco', 'foto', 'doc_id') ready_only_fields = ('comentarios', 'avaliacoes')
class pontoTuristicoSerializer(ModelSerializer): atracoes = AtracaoSerializer(many=True) #relaçao muitos pra muitos endereco = EnderecoSerializer() class Meta: model = pontoTuristico fields = ('id', 'nome', 'descricao', 'status', 'endereco', 'foto', 'atracoes', 'comentarios') read_only_fields = ['comentarios'] 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'] #manytomany relacionamentos #relacionamento com chave estrangeira FK 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 ponto.save() #relacionamento de 1-1 return ponto
class PontoTuristicoSerializer(ModelSerializer): atracoes = AtracoesSerializer(many=True) endereco = EnderecoSerializer() class Meta: model = PontoTuristico fields = ('id', 'nome', 'descricao', 'foto', 'atracoes', 'endereco')
class PontoTuristicoSerializer (ModelSerializer): atracoes = AtracaoSerializer(many=True) endereco = EnderecoSerializer() class Meta: model = PontoTuristico fields = ('id', 'nome', 'descricao', 'aprovado', 'atracoes', 'comentarios', 'avaliacoes', 'endereco', 'descricao_completa')
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 CoworkingSerializer(serializers.ModelSerializer): endereco = EnderecoSerializer() class Meta: model = Coworking fields = [ 'id', 'logo', 'nome', 'descricao', 'ativo', 'status', 'endereco' ]
def api_detail_enderecos(request, id): try: endereco = Endereco.objects.get(id=id) except Endereco.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) if request.method == "GET": serializer = EnderecoSerializer(endereco) return Response(serializer.data)
class PontoTuristicoSerializer(ModelSerializer): atracoes = AtracaoSerializer( many=True) # Usamos many quando temos relação de 1 para muitos enderecos = EnderecoSerializer() class Meta: model = PontoTuristico fields = ('id', 'nome', 'descricao', 'aprovado', 'foto', 'atracoes', 'comentarios', 'avaliacoes', 'endereco')
class PontoTuristicoSerializer(ModelSerializer): # NestedRelationShip Carrega os objetos internos atracoes = AtracaoSerializer(many=True) endereco = EnderecoSerializer() descricao_completa = SerializerMethodField() #doc_identificacao class Meta: model = PontoTuristico fields = [ 'id', 'nome', 'descricao', 'aprovado', 'foto', 'atracoes', 'comentarios', 'avaliacoes', 'endereco', 'descricao_completa', 'descricao_completa2' ] read_only_fields = ('comentarios', 'avaliacoes') # Salvando requests com objetos relacionados # Modelo ManyToMany # Objetos secundarios def cria_atracoes(self, atracoes, ponto): for atracao in atracoes: at = Atracao.objects.create(**atracao) ponto.atracoes.add(at) # Cria o registro principal e faz a chamada para inserir os objs secundarios def create(self, validated_data): atracoes = validated_data['atracoes'] del validated_data['atracoes'] print(validated_data) 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_atracoes(atracoes, ponto) end = Endereco.objects.create(**endereco) ponto.endereco = end #ponto.doc_identificacao = doci ponto.save() return ponto # Funciona como um 'transient' (para nao precisar gravar isso no banco) def get_descricao_completa(self, obj): return '%s - %s' % (obj.nome, obj.descricao)
class PontoTuristicoSerializer(ModelSerializer): descricao_completa = SerializerMethodField() atracoes = AtracaoSerializer(many=True, read_only=True) endereco = EnderecoSerializer(many=False, read_only=True) class Meta: model = PontoTuristico fields = ('id', 'nome', 'descricao_completa', 'descricao_completa2', 'aprovado', 'foto', 'endereco', 'atracoes') def get_descricao_completa(self, obj): return '%s - %s' % ('Descricao', obj.descricao)
class PontoTuristicoSerializer(ModelSerializer): #é preciso botar read_only -> por conta não se obrigado quando for feito o post (assim vai ignorar esse campo memso se mandar # atracoes = AtracaoSerializer(many=True, read_only=True) #relacionamento manyToMany atracoes = AtracaoSerializer(many=True) endereco = EnderecoSerializer() descricao_completa = SerializerMethodField() doc_identificador = DocIdentificadorSerializer() class Meta: model = PontoTuristico fields = ('id', 'nome', 'descricao', 'aprovado', 'foto', 'atracoes', 'comentarios', 'avaliacoes', 'endereco', 'doc_identificador', 'descricao_completa', 'descricao_completa2') read_only_fields = ('comentarios', 'avaliacoes') def criar_doc_identificador(self, documento, ponto_turistico): doc = DocIdentificador.objects.create(**documento) ponto_turistico.doc_identificador = doc def criar_atracoes(self, atracoes, ponto_turistico): for atracao in atracoes: at = Atracao.objects.create(**atracao) ponto_turistico.atracoes.add(at) def criar_endereco(self, endereco, ponto_turistico): end = Endereco.objects.create(**endereco) ponto_turistico.endereco = end #para criar a variável que se relaciona def create(self, validated_data): atracoes = validated_data['atracoes'] #deletando del validated_data['atracoes'] endereco = validated_data['endereco'] del validated_data['endereco'] documento = validated_data['doc_identificador'] del validated_data['doc_identificador'] ponto_turistico = PontoTuristico.objects.create(**validated_data) self.criar_atracoes(atracoes, ponto_turistico) self.criar_endereco(endereco, ponto_turistico) self.criar_doc_identificador(documento, ponto_turistico) ponto_turistico.save() return ponto_turistico def get_descricao_completa(self, obj): #pode pegar atributos do objeto que nem estão sendo usado #nos fields return '%s - %s' % (obj.nome, obj.descricao)
class PontoTuristicoSerializer(ModelSerializer): # *** Nested relationships - Traz todos os campos do models relacionados *** # *** O parâmetro read_only=True serve para incluirmos via post os campos que são obrigatórios no model *** atracoes = AtracaoSerializer(many=True) endereco = EnderecoSerializer() descricao_completa = SerializerMethodField() doc_identificacao = DocIdentificacaoSerializer() # comentarios = ComentarioSerializer(many=True, read_only=True) # avaliacoes = AvaliacaoSerializer(many=True, read_only=True) class Meta: model = PontoTuristico fields = ('id', 'nome', 'descricao', 'descricao_completa', 'descricao_completa2', 'aprovado', 'foto', 'atracoes', 'avaliacoes', 'comentarios', 'endereco', 'doc_identificacao') # *** Corresponde ao read_only=True, quando não são campos extras read_only_fields = ('comentarios', ) 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'] end = Endereco.objects.create(**endereco) avaliacoes = validated_data['avaliacoes'] del validated_data['avaliacoes'] doc = validated_data['doc_identificacao'] del validated_data['doc_identificacao'] doc1 = DocIdentificacao.objects.create(**doc) ponto = PontoTuristico.objects.create(**validated_data) self.cria_atracoes(atracoes, ponto) ponto.avaliacoes.set(avaliacoes) ponto.endereco = end ponto.doc_identificacao = doc1 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(many=False) descricao_completa = SerializerMethodField() doc_identificacao = DocIdentificacaoSerializer() class Meta: model = PontoTuristico fields = ('id', 'nome', 'descricao', 'aprovado', 'foto', 'atracoes', 'comentarios', 'avaliacoes', 'endereco', 'descricao_completa', 'descricao_completa2', 'doc_identificacao') read_only_fields = ('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): ##carregando atracoes atracoes = validated_data['atracoes'] del validated_data['atracoes'] ##carregando endereco endereco = validated_data['endereco'] del validated_data['endereco'] ##carregando doc identificacao doc = validated_data['doc_identificacao'] del validated_data['doc_identificacao'] ##criando objeto ponto turistico ponto = PontoTuristico.objects.create(**validated_data) ##preenchendo atracoes ao objeto ponto turistico self.cria_atracoes(atracoes, ponto) ##preenchendo endereco ao objeto ponto turistico end = Endereco.objects.create(**endereco) ponto.endereco = end ##preenchendo doc_identificacao doc1 = DocIdentificacao.objects.create(**doc) ponto.doc_identificacao = doc1 ponto.save() ##retornando objeto para gravação return ponto def get_descricao_completa(self, obj): return '%s - %s' % (obj.nome, obj.descricao)
class PontoTuristicoSerializer(ModelSerializer): atracao = AtracaoSerializer(many=True) endereco = EnderecoSerializer() descricao_completa = SerializerMethodField() doc_identificacao = DocIndentificacaoSerializer() class Meta: model = PontoTuristico fields = ('id', 'nome', 'descricao', 'aprovado', 'foto', 'atracao', 'endereco', 'comentarios', 'avaliacoes', 'descricao_completa', 'descricao_completa2', 'doc_identificacao') read_only_fields = ('comentarios', 'avaliacoes') ## ManyToMany def cria_atracoes(self, atracoes, ponto): for atracao in atracoes: at = Atracao.objects.create( **atracao) #criando atracoes no banco de dados ponto.atracoes.add( at) ##relacionando atracoes com o ponto turistico def create(self, validated_data): atracoes = validated_data[ 'atracoes'] ##recebendo os dados e criando uma lista de atracoes del validated_data[ 'atracoes'] ## deletando a lista de atracoes da lista recebida. endereco = validated_data[ 'endereco'] # recebe os dados enviado e separa o endereco em uma variavel del validated_data['endereco'] # deleta variavel doc = validated_data['doc_identificacao'] del validated_data['doc_identificacao'] doci = DecIdentificacao.objects.create(**doc) ponto = PontoTuristico.objects.create( **validated_data ) #adicionando ponto turistico, depois de excluir atracoes da lista de ados recebido. self.cria_atracoes(atracoes, ponto) ## Forekey 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() descricao_completa = SerializerMethodField() class Meta: model = PontoTuristico fields = ('id', 'nome', 'descricao', 'aprovado', 'foto', 'atracoes', 'comentarios', 'avaliacoes', 'endereco', 'descricao_completa', 'descricao_completa2') def get_descricao_completa(self, obj): return '%s - %s' % (obj.nome, obj.descricao)
class PontoTuristicoSerializer(ModelSerializer): recursos = RecursoSerializer(many=True) endereco = EnderecoSerializer() descricao_completa = SerializerMethodField() doc_identificacao = DocIdentificacaoSerializer() # aprovacao = SerializerMethodField() class Meta: model = PontoTuristico fields = [ 'id', 'nome', 'descricao', 'aprovado', 'recursos', 'comentarios', 'avaliacoes', 'endereco', 'foto', 'descricao_completa', 'aprovacao', 'doc_identificacao' ] read_only_fields = ['comentarios', 'avaliacoes'] def cria_recursos(self, recursos, ponto): for recurso in recursos: rc = Recurso.objects.create(**recurso) ponto.recursos.add(rc) def create(self, validated_data): recursos = validated_data['recursos'] del validated_data['recursos'] 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_recursos(recursos, 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) # def get_aprovacao(self, obj): # return '%s - %s' % (obj.id, obj.aprovado)
class PontoTuristicoSerializer(ModelSerializer): atracoes = AtracaoSerializer(many=True) endereco = EnderecoSerializer() descricao_completa = SerializerMethodField() doc_identificacao = DocIdentificacaoSerializer() class Meta: model = PontoTuristico fields = ( 'id', 'nome', 'descricao', 'aprovado', 'atracoes', 'comentarios', 'avaliacoes', 'endereco', 'descricao_completa', 'descricao_completa2', 'doc_identificacao' ) read_only_fields = ('comentarios',) def cria_atracoe(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'] avaliacoes = validated_data['avaliacoes'] del validated_data['avaliacoes'] doc = validated_data['doc_identificacao'] del validated_data['doc_identificacao'] doci = DocIdentificacao.objects.create(**doc) ponto = PontoTuristico.objects.create(**validated_data) self.cria_atracoe(atracoes, ponto) ponto.avaliacoes.set(avaliacoes) 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(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 PontoTuristicoSerializer(ModelSerializer): atracoes = AtracaoSerializer( many=True) # Traz a serializacao do modelo atracao endereco = EnderecoSerializer( ) # many so usa se o relacionamento for many to many descricao_completa = SerializerMethodField( ) # incluindo informacoes adicionais doc_identificacao = DocIdentificacaoSerializer() class Meta: model = PontoTuristico fields = ('id', 'nome', 'descricao', 'aprovado', 'foto', 'atracoes', 'comentarios', 'avaliacoes', 'endereco', 'descricao_completa', 'descricao_completa2', 'doc_identificacao') read_only_fields = ('comentarios', 'avaliacoes') def cria_atracoes(self, atracoes, ponto): # atrela as atracoes ao ponto turistico 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'] # obtem do post del validated_data['endereco'] # deleta doc = validated_data['doc_identificacao'] del validated_data['doc_identificacao'] doci = DocIdentificacao.objects.create(**doc) ponto = PontoTuristico.objects.create(**validated_data) self.cria_atracoes(atracoes, ponto) end = Endereco.objects.create(**endereco) # creia o endereco no BD ponto.endereco = end # atrela o endereco ao ponto 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() descricao_completa = SerializerMethodField() doc_identificacao = DocIdentificacaoSerializer() class Meta: model = PontoTuristico fields = [ 'id', 'nome', 'descricao', 'doc_identificacao', 'aprovado', 'foto', 'atracoes', 'endereco', 'comentarios', 'avaliacoes', 'descricao_completa', 'descricao_completa2' ] read_only_fields = ('comentarios', 'avaliacoes') depth = 1 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'] docdata = validated_data['doc_identificacao'] del validated_data['doc_identificacao'] #** diz que o django vai interar nessa variavel diccionario para criar o ponto turistico no banco de dados ponto = PontoTuristico.objects.create(**validated_data) self.cria_atracoes(atracoes, ponto) end = Endereco.objects.create(**endereco) ponto.endereco = end doc = DocIdentificacao.objects.create(**docdata) ponto.doc_identificacao = doc ponto.save() return ponto def get_descricao_completa(self, obj): return "%s - %s" % (obj.nome, obj.descricao)
class PontoTuristicoSerializer(serializers.ModelSerializer): Atracoes = AtracoesSerializer(many=True) Enderecos = EnderecoSerializer() descricao_completa = SerializerMethodField() doc_identificacao = DocIdentificacaoSerializer() class Meta: model = PontoTuristico fields = ['id', 'Nome', 'Descricao', 'Aprovado', 'Foto', 'Atracoes', 'Comentarios', 'Avaliacoes', 'Enderecos', 'descricao_completa', 'descricao_completa2', 'doc_identificacao'] def get_descricao_completa(self, obj): return "%s - %s" % (obj.Nome, obj.Descricao) 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['enderecos'] del validated_data['enderecos'] doc = validated_data['doc_identificacao'] del validated_data['doc_identificacao'] ponto = PontoTuristico.objects.create(**validated_data) self.cria_atracoes(atracoes, ponto) end = Endereco.objects.create(**endereco) ponto.Enderecos = end doci = DocIdentificacao.objects.create(**doc) ponto.Doc_Identificacao = doci ponto.save() return ponto
class PontoTuristicoSerializer(ModelSerializer): atracoes = AtracaoSerializer(many=True) endereco = EnderecoSerializer() # comentarios = ComentarioSerializer(many=True) # avaliacoes = AvaliacaoSerializer(many=True) class Meta: model = PontoTuristico fields = ('id', 'nome', 'descricao', 'aprovado', 'atracoes', 'comentarios', 'avaliacoes', 'endereco', 'foto') read_only_fields = ('comentarios', 'avaliacoes') def extract_atracao(self, validated_data): atracoes = validated_data['atracoes'] del validated_data['atracoes'] return atracoes def extract_endereco(self, validated_data): endereco = validated_data['endereco'] del validated_data['endereco'] return endereco def create_atracoes(self, atracoes, ponto_turistico): for atracao in atracoes: nova_atracao = Atracao.objects.create(**atracao) ponto_turistico.atracoes.add(nova_atracao) def create_endereco(self, endereco, ponto_turistico): endereco = Endereco.objects.create(**endereco) ponto_turistico.endereco = endereco def create(self, validated_data): atracoes = self.extract_atracao(validated_data) endereco = self.extract_endereco(validated_data) ponto_turistico = PontoTuristico.objects.create(**validated_data) self.create_atracoes(atracoes, ponto_turistico) self.create_endereco(endereco, ponto_turistico) ponto_turistico.save() return ponto_turistico
class PontoTuristicoSerializer(ModelSerializer): atracoes = AtracaoSerializer(many=True) #todo reuso de codigo, atributos. endereco = EnderecoSerializer() #todo incrementando o meu serializer: com MethodField > adicionando um atributo novo. descricao_completa = SerializerMethodField() class Meta: model = PontoTuristico #todo warning cuidado com os espaços ao criar os atributos - Hehe fields = ('id', 'nome', 'descricao', 'aprovado', 'foto', 'atracoes', 'comentarios', 'avaliacoes', 'endereco', 'descricao_completa', 'descricao_completa2') #todo descricao_completa2 -> classe modelo hehe #todo o retorno serão os atributos concatenados . 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 PontoTuristicoSerializer(ModelSerializer): atracoes = AtracaoSerializer(many=True) endereco = EnderecoSerializer(read_only=True) #avaliacoes = AvaliacaoSerializer(many=True) #comentarios = ComentarioSerializer(many=True) descricao_completa = SerializerMethodField() class Meta: model = PontoTuristico fields = ('id', 'nome', 'descricao', 'aprovado', 'foto', 'atracoes', 'comentarios', 'avaliacoes', 'endereco', 'descricao_completa', 'descricao_completa2' ) read_only_fields = ('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'] ponto = PontoTuristico.objects.create(**validated_data) self.cria_atracoes(atracoes, ponto) return ponto """ forma de manipular dados antes de enviar o retorno (metodo nao recomendado) """ def get_descricao_completa(self, obj): return '%s - %s' % (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