1
I happen to have the classes Pessoas
, Profissoes
, ProfissoesPessoa
and QualificacoesProfissoesPesssoa
In thesis my Models is so below:
# -*- coding: utf-8 -*-
from django.db import models
from django.contrib.auth.models import User
#from __future__ import unicode_literals
class Pessoa(models.Model):# TA FEITO
username = models.OneToOneField(User, blank=True, null=True)
nomepessoa = models.CharField('Nome', max_length=100, null=False, blank=False)
sobrenomepessoa = models.CharField('Sobrenome', max_length=100, null=False, blank=False)
tipologradouro = models.CharField('Tipo Logradouro', max_length=100, null=False, blank=False)
logradouro = models.CharField('Logradouro', max_length=100)
numero = models.IntegerField('Número', null=False, blank=False)
bairro = models.CharField('Bairro', max_length=50, null=False, blank=False)
cidade = models.CharField('Cidade', max_length=50, null=False, blank=False)
estado = models.CharField('estado', max_length=10, null=False, blank=False)
longitude = models.FloatField('Longitude', null=True, blank=True)
latitude = models.FloatField('Latitude', null=True, blank=True)
#profissao = models.ManyToManyField('Profissao', through='ProfissoesPessoa', related_name='pessoas')
class Meta:
verbose_name_plural = 'pessoas'
verbose_name = 'pessoa'
def __str__(self):
return self.nomepessoa
class Profissao(models.Model):# TA FEITO
profissao = models.CharField(max_length=100,null=False, blank=False)
class Meta:
verbose_name_plural = 'profissões'
verbose_name = 'profissão'
def __str__(self):
return self.profissao
class ProfissoesPessoa(models.Model):# TA FEITO
pessoa = models.ForeignKey(Pessoa, related_name='profissoesPessoa')#, related_name='pessoa'
profissoes = models.ForeignKey(Profissao)#, related_name='profissoes'
rating = models.DecimalField(max_digits=5, decimal_places=2, default=0, null=False, blank=False)
class Meta:
unique_together = ("pessoa", "profissoes")
verbose_name_plural = 'profissoes da pessoa'
verbose_name = 'profissão da pessoa'
def __unicode__(self):
return "%s is in profissoes %s (as %s)" % (self.pessoa, self.profissoes, self.type)
def __str__(self):
return self.profissoes.profissao
def nomepessoa(self):
return self.pessoa.nomepessoa
class Comentarios(models.Model):# TA FEITO
profissaopessoa = models.ForeignKey(ProfissoesPessoa)
comentario = models.TextField(max_length=200,null=False, blank=False)
rating = models.DecimalField(max_digits=5, decimal_places=2, default=0, null=False, blank=False)
class Meta:
#unique_together = ("pessoa", "profissoes")
verbose_name_plural = 'comentários dos profissionais'
verbose_name = 'comentários do profissional'
def nomepessoa(self):
return self.profissaopessoa.pessoa.nomepessoa
class Qualificacoes(models.Model):
profissaopessoa = models.ManyToManyField('ProfissoesPessoa')
descricao = models.CharField(max_length=100, null=False, blank=False)
class Meta:
verbose_name_plural= 'Qualificações'
verbose_name = 'Qualificação'
My Views are as below:
import requests
from django.contrib.auth.models import User
from django.shortcuts import render
from sosmypc.core.forms import TecnicoForm
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from rest_framework.renderers import JSONRenderer
from rest_framework.response import Response
from rest_framework.decorators import api_view
from rest_framework.parsers import JSONParser
from sosmypc.core.models import Pessoa
from sosmypc.core.serializers import PessoaSerializer
# Create your views here.
from sosmypc.core.models import Pessoa#, Qualificacao, Tecnico
class JSONResponse(HttpResponse):
"""
An HttpResponse that renders its content into JSON.
"""
def __init__(self, data, **kwargs):
content = JSONRenderer().render(data)
kwargs['content_type'] = 'application/json'
super(JSONResponse, self).__init__(content, **kwargs)
#@csrf_exempt
@api_view(['GET','POST'])
def pessoa_list(request):
"""
List all code pessoas, or create a new pessoa.
"""
if request.method == 'GET':
pessoas = Pessoa.objects.all()
serializer = PessoaSerializer(pessoas, many=True)
#return JSONResponse(serializer.data)
return Response(serializer.data)
elif request.method == 'POST':
data = JSONParser().parse(request)
serializer = PessoaSerializer(data=data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=201)
return Response(serializer.errors, status=400)
@csrf_exempt
def pessoa_detail(request, pk):
"""
Retrieve, update or delete a code pessoa.
"""
try:
pessoa = Pessoa.objects.get(pk=pk)
except Pessoa.DoesNotExist:
return HttpResponse(status=404)
if request.method == 'GET':
serializer = PessoaSerializer(pessoa)
return JSONResponse(serializer.data)
elif request.method == 'PUT':
data = JSONParser().parse(request)
serializer = PessoaSerializer(pessoa, data=data)
if serializer.is_valid():
serializer.save()
return JSONResponse(serializer.data)
return JSONResponse(serializer.errors, status=400)
elif request.method == 'DELETE':
pessoa.delete()
return HttpResponse(status=204)
And my serializer is like this below:
from rest_framework import serializers
from sosmypc.core.models import *
class Qualificacoes(serializers.ModelSerializer):
qualificacoes = serializers.StringRelatedField(many=True)
class Meta:
model = Qualificacoes
fields = ('id','profissoes','rating')
class ProfissoesPessoaSerializer(serializers.ModelSerializer):
profissoesPessoa = serializers.StringRelatedField(many=True, read_only=True)
class Meta:
model = ProfissoesPessoa
fields = ('id','profissoespessoa','descricao', 'qualificacoes')
class PessoaSerializer(serializers.ModelSerializer):
class Meta:
model = Pessoa
fields = ('id', 'nomepessoa', 'tipologradouro', 'logradouro', 'numero', 'bairro', 'cidade', 'estado', 'longitude', 'latitude','profissoesPessoa')
def create(self, validated_data):
"""
Create and return a new `Snippet` instance, given the validated data.
"""
return Pessoa.objects.create(**validated_data)
def update(self, instance, validated_data):
"""
Update and return an existing `Snippet` instance, given the validated data.
"""
instance.nomepessoa = validated_data.get('nomepessoa', instance.title)
instance.sobrenomepessoa = validated_data.get('sobrenomepessoa', instance.code)
instance.tipologradouro = validated_data.get('tipologradouro', instance.linenos)
instance.logradouro = validated_data.get('logradouro', instance.language)
instance.numero = validated_data.get('numero', instance.style)
instance.bairro = validated_data.get('bairro', instance.style)
instance.cidade = validated_data.get('cidade', instance.style)
instance.estado = validated_data.get('estado', instance.style)
instance.longitude = validated_data.get('longitude', instance.style)
instance.latitude = validated_data.get('latitude', instance.style)
instance.save()
return instance
All I wanted was to generate a json with people, each person can have one or more professions and each profession can have many qualifications.
I’m not making it.
Start by identifying your classes in the question, they’re all piled up, you can’t tell which is which.
– user28595
Gee, I’m sorry. .
– Elias Coutinho