2012-04-27 9 views
10

Possiedo un modello TastypieResource che ottiene i suoi campi da un normale modello Django. Vorrei rendere determinati campi di sola lettura sulla risorsa Tastypie, anche se sono scrivibili nel modello sottostante. È possibile realizzare questo in modo semplice?Posso creare un campo di tiporespettore per il tipo di dati in sola lettura?

ho provato la seguente senza alcun risultato:

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

Scusa, ho dimenticato di dire che non ho potuto ottenere il suddetto 'trucco' a lavorare con la risorsa/schema che viene generato dal Tastypie, che in realtà è quello che sto cercando –

+2

Ops. Ho funzionato cambiando read_only a readonly. Colpa mia. –

+2

non dovrebbe la chiamata super avere il nome della classe in esso –

risposta

4

Normalmente avrei fatto una cosa del genere nel idrato/processo di disidratarsi.

Probabilmente ci sono altri modi,

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

Hai ragione, ma ho dimenticato di menzionare che volevo lo schema che Tastypie può produrre in uscita per la risorsa per poterlo refelettere che era in sola lettura. La mia 'soluzione' fa questo per me. –

1

Non è sicuro se avete bisogno di questo più, ma ecco il link alla documentazione ufficiale relativa al readonly campi.

esempio:

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

Spero che questo aiuti qualcuno.

Grazie

Problemi correlati