2012-04-27 6 views
10

Tengo un Tastypie ModelResource que obtiene sus campos de un modelo Django regular. Me gustaría que ciertos campos se lean solo en el recurso Tastypie, aunque se puedan escribir en el modelo subyacente. ¿Es esto posible de lograr de una manera simple?¿Puedo hacer un campo de diseño de modelo sabrosa de solo lectura?

He intentado lo siguiente en vano:

def __init__(self, **kwargs): 
    super(ModelResource, self).__init__(**kwargs) 
    for f in getattr(self.Meta, 'read_onlys', []): 
     self.fields[f].read_only = True 
+0

siento, me olvidé de mencionar que no pude conseguir el ya mencionado 'truco' para trabajar con el recurso/esquema que se genera por Tastypie, que es realmente lo que busco –

+2

Lamentablemente. Lo hice funcionar cambiando read_only a readonly. Mi error. –

+2

no debería la súper llamada tener su nombre de clase en él –

Respuesta

4

Normalmente me gustaría hacer ese tipo de cosas en el hidrato/proceso de deshidratación.

Probablemente hay otras maneras,

def hydrate(self, bundle): 
    if bundle.obj.pk: 
     bundle.data['somefield'] = bundle.obj.somefield 
    else: 
     bundle.data.pop('somefield') 

    return super(MyResource, self).hydrate(bundle) 
+2

Tiene razón, pero olvidé mencionar que quería que el esquema que Tastypie puede generar para el recurso refleje que era de solo lectura. Mi 'solución' hace esto por mí. –

1

No está seguro si necesita más esto, pero aquí está el enlace a la documentación oficial relacionada con readonly campos.

ejemplo:

class ResourceA(ModelResource): 
    read_only_field = fields.DateTimeField('attribute', readonly=True) 

Espero que esto ayude a alguien.

Gracias

Cuestiones relacionadas