I'm using the browsable api interface and I able to create and update using the HTML form, but when I try to do the same using raw JSON I get this error:
I've been testing several configurations on my serializers and I read the documentation, but I don't know what I'm doing wrong.
I think the problem is the nested objects.
class Propiedad(models.Model): # Datos
user = models.ForeignKey(User,verbose_name='Usuario')
titulo = models.CharField('Título', max_length=100)
tipo_propiedad = models.ForeignKey('tipos.Tipo_propiedad', verbose_name='Tipo de propiedad')
tipo_operacion = models.ForeignKey('tipos.Tipo_operacion',verbose_name='Tipo de operación')
descripcion = models.TextField('Descripción',blank=True, null=True)
vistas = models.IntegerField('Vistas', blank=True, null=True)
likes = models.IntegerField('Me gusta', blank=True, null=True)
precio = models.IntegerField('Precio')
moneda = models.CharField('Moneda', max_length=4,choices=MONEDA, default=MONEDA[0][0])
tipo_cobro = models.ForeignKey('tipos.Tipo_cobro',verbose_name='Tipo de cobro', blank=True, null=True)
expiracion = models.DateTimeField('Fecha de expiración', blank=True, null=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
verbose_name = 'Propiedad'
verbose_name_plural = 'Propiedades'
def __unicode__(self):
return self.titulo
class Datos_generales(models.Model):
propiedad = models.OneToOneField('propiedades.Propiedad',verbose_name='Propiedad',blank=True,null=True)
fraccionamiento = models.BooleanField('Fraccionamiento', default=False, blank=True)
calle = models.CharField('Calle', max_length=100)
colonia = models.CharField('Colonia', max_length=100)
numero_exterior = models.CharField('Número exterior', max_length=10, blank=True, null=True)
numero_interior = models.CharField('Número interior', max_length=10, blank=True, null=True)
codigo_postal = models.CharField('Código postal', max_length=10, blank=True, null=True)
edad = models.CharField('Edad del inmueble', max_length=20, blank=True, null=True)
estado_conservacion = models.CharField('Estado de conservación', max_length=20, choices=ESTADO_CONSERVACION,blank=True, null=True)
cuartos = models.IntegerField('Núm. Cuartos', blank=True, null=True)
banios = models.IntegerField('Núm. Baños', blank=True, null=True)
medios_banios = models.IntegerField('Núm. Medios baños', blank=True, null=True)
estacionamientos = models.IntegerField('Estacionamientos', blank=True, null=True)
ubicacion = GeopositionField()
class Meta:
verbose_name = 'Datos generales'
verbose_name_plural = 'Datos generales'
def __unicode__(self):
return 'Datos generales'
class Caracteristicas(models.Model): # Características generales
propiedad = models.OneToOneField('propiedades.Propiedad',verbose_name='Propiedad',blank=True,null=True)
vestidor = models.BooleanField('Vestidor', default=False, blank=True)
azotea = models.BooleanField('Azotea', default=False, blank=True)
jardin = models.BooleanField('Jardín', default=False, blank=True)
cocina_integral = models.BooleanField('Cocina integral', default=False, blank=True)
comedor = models.BooleanField('Comedor', default=False, blank=True)
sala = models.BooleanField('Sala', default=False, blank=True)
cuartos_servicio = models.BooleanField('Cuartos de servicio', default=False, blank=True)
cuarto_lavado = models.BooleanField('Cuarto de lavado', default=False, blank=True)
niveles_construidos = models.IntegerField('Niveles construidos', blank=True, null=True)
mascotas = models.BooleanField('Mascotas', default=False, blank=True)
acceso_discapacitados = models.BooleanField('Acceso discapacitados', default=False, blank=True)
amueblado = models.CharField('Amueblado', max_length=30, choices=AMUEBLADO, default=AMUEBLADO[0][0], blank=True, null=True)
tipo_terreno = models.CharField('Tipo de terreno', max_length=20, choices=TIPO_TERRENO, blank=True, null=True)
escuelas_cercanas = models.BooleanField('Escuelas cercanas', default=False, blank=True)
cc_cercanos = models.BooleanField('Centros Comerciales Cercanos', default=False, blank=True)
class Meta:
verbose_name = 'Caracteristicas'
verbose_name_plural = 'Caracteristicas'
def __unicode__(self):
return 'Caracteristicas'
class Amenidades(models.Model): # Amenidades
propiedad = models.OneToOneField('propiedades.Propiedad',verbose_name='Propiedad',blank=True,null=True)
desayunador = models.BooleanField('Desayunador', default=False, blank=True)
sala_tv = models.BooleanField('Sala de TV', default=False, blank=True)
terraza = models.BooleanField('Terraza', default=False, blank=True)
alberca = models.BooleanField('Alberca', default=False, blank=True)
jacuzzi = models.BooleanField('Jacuzzi', default=False, blank=True)
salon_juegos = models.BooleanField('Salón de juegos', default=False, blank=True)
salon_fiestas = models.BooleanField('Salón de fiestas', default=False, blank=True)
estudio = models.BooleanField('Estudio', default=False, blank=True)
bodegas = models.IntegerField('Bodega(s)', default=0, blank=True, null=True)
vista_panoramica = models.BooleanField('Vista panorámica', default=False, blank=True)
class Meta:
verbose_name = 'Amenidades'
verbose_name_plural = 'Amenidades'
def __unicode__(self):
return 'Amenidades'
class Servicios(models.Model): # Servicios
propiedad = models.OneToOneField('propiedades.Propiedad',verbose_name='Propiedad',blank=True,null=True)
cisterna = models.BooleanField('Cisterna', default=False, blank=True)
aire_acondicionado = models.IntegerField('Aire acondicionado', default=0, blank=True, null=True)
alarma = models.BooleanField('Alarma', default=False, blank=True)
gimnasio = models.BooleanField('Gimnasio', default=False, blank=True)
asador = models.BooleanField('Asador/Parrila', default=False, blank=True)
calefaccion = models.BooleanField('Calefacción', default=False, blank=True)
seguridad_privada = models.BooleanField('Seguridad privada', default=False, blank=True)
servicios_basicos = models.BooleanField('Servicios básicos (agua/luz)', default=False, blank=True)
gas = models.BooleanField('Gas', default=False, blank=True)
linea_telefonica = models.BooleanField('Línea telefónica', default=False, blank=True)
internet = models.BooleanField('Internet', default=False, blank=True)
class Meta:
verbose_name = 'Servicios'
verbose_name_plural = 'Servicios'
def __unicode__(self):
return 'Servicios'
class Datos_generalesSerializer(serializers.ModelSerializer):
class Meta:
model = Datos_generales
fields = (
"id",
"fraccionamiento",
"calle",
"colonia",
"numero_exterior",
"numero_interior",
"codigo_postal",
"edad",
"estado_conservacion",
"cuartos",
"banios",
"medios_banios",
"estacionamientos",
"ubicacion",
)
class CaracteristicasSerializer(serializers.ModelSerializer):
class Meta:
model = Caracteristicas
fields = (
"id",
"vestidor",
"azotea",
"jardin",
"cocina_integral",
"comedor",
"sala",
"cuartos_servicio",
"cuarto_lavado",
"niveles_construidos",
"mascotas",
"acceso_discapacitados",
"amueblado",
"tipo_terreno",
"escuelas_cercanas",
"cc_cercanos",
)
class PropiedadViewSet(viewsets.ModelViewSet):
serializer_class = PropiedadSerializer
queryset = Propiedad.objects.all()
def perform_create(self, serializer):
serializer.save(user=self.request.user)
REST_FRAMEWORK = {
'PAGINATE_BY': 10,
'PAGINATE_BY_PARAM': 'page_size',
'MAX_PAGINATE_BY': 100,
'DEFAULT_PAGINATION_SERIALIZER_CLASS':
'rest_framework_ember.pagination.PaginationSerializer',
'DEFAULT_PARSER_CLASSES': (
'rest_framework_ember.parsers.JSONParser',
'rest_framework.parsers.FormParser',
'rest_framework.parsers.MultiPartParser'
),
'DEFAULT_RENDERER_CLASSES': (
'rest_framework_ember.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
),
}
Thanks in advance.