Django-tastypie può visualizzare un insieme diverso di campi nell'elenco e nelle viste dei dettagli di una singola risorsa?

StackOverflow https://stackoverflow.com//questions/10693379

  •  12-12-2019
  •  | 
  •  

Domanda

Vorrei che una particolare risorsa del modello django-tastypie abbia solo un sottoinsieme di campi durante l'elencazione degli oggetti e tutti i campi quando si mostrano un dettaglio.È possibile?

È stato utile?

Soluzione

Dovresti specificare tutti i campi nell'effettivo ModelResource quindi sovrascrivere il metodo get_list per filtrare solo i campi che si desidera visualizzare. Vedere l'implementazione interna di get_list su Resource per vedere come sovrascriverlo.

Tuttavia, Nota Si applicerà solo alle richieste di ricezione, dovresti essere ancora in grado di postare / inserire / patch sulla risorsa con tutti i campi se i limiti di autorizzazione ti permettono di farlo.

In un guscio di dado, si desidera caldare la hot patch L'elenco del campo interno prima di Full_Dehydrate viene chiamato su tutti gli oggetti ORM restituiti da obj_get_list.

In alternativa, è possibile lasciare che il meccanismo di disidratazione completo avvenga e proprio alla fine di esso rimuovere i campi che non vuoi mostrare se non ti importa di spremere il più possibile la velocità possibile. Naturalmente dovresti farlo solo se l'URL è invocato come conseguenza della chiamata Get_List. C'è un metodo di convenienza per questo alter_list_data_to_serialize(request, to_be_serialized).

Basta fare:

class SomeResource(Resource):
    class Meta(...):
         ...
         field_list_to_remove = [ 'field1', 'field2' ]
         ...

    def alter_list_data_to_serialize(request, to_be_serialized):
        for obj in to_be_serialized['objects']:
            for field_name in self._meta.field_list_to_remove:
                del obj.data[field_name]
        return to_be_serialized
.

Altri suggerimenti

Puoi anche usare il use_in AttributoSu un campo per specificare la risorsa pertinente per mostrare il campo in. Questo può essere generatoDicetagcode o list o una callback.

C'è un Open tey per questo su GitHub, con un numero diWorkarounds suggerito lì.

può anche utilizzare il metodo di disidratato (sé, bundle).

def dehydrate(self, bundle): del bundle.data['attr-to-del] return bundle

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top