Chciałbym, aby konkretny zasób modelu django-tastypie
miał tylko podzbiór pól podczas wyświetlania obiektów i wszystkich pól przy wyświetlaniu szczegółów. czy to możliwe?Czy django-tastypie może wyświetlać inny zestaw pól na liście i szczegółowe widoki pojedynczego zasobu?
Odpowiedz
Należy określić wszystkie pola w faktycznym źródle ModelResource, a następnie zastąpić metodę get_list
, aby odfiltrować tylko te pola, które mają być wyświetlane. Zobacz wewnętrzną implementację get_list
na Resource
, aby zobaczyć, jak ją przesłonić.
Należy jednak zauważyć, że będzie to miało zastosowanie tylko w przypadku żądań GET, nadal powinieneś mieć możliwość POST/PUT/PATCH na zasobie ze wszystkimi polami, jeśli pozwalają na to ograniczenia autoryzacji.
W powłoce orzecha, chcesz poprawić listę wewnętrznych pól, zanim zostanie wywołana funkcja full_dehydrate na wszystkich obiektach ORM zwróconych przez obj_get_list
.
Alternatywnie, możesz pozwolić, aby mechanizm pełnego odwodnienia miał miejsce, a na samym końcu usuń te pola, których nie chcesz pokazać, jeśli nie zależy Ci na wyciskaniu jak największej prędkości. Oczywiście musisz to zrobić tylko wtedy, gdy URL jest wywoływany w wyniku wywołania get_list. Istnieje metoda wygodna dla tego alter_list_data_to_serialize(request, to_be_serialized)
.
Wystarczy zrobić:
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
Jest open issue for this na GitHub, z liczbą obejścia zaproponował tam.
Możesz również teraz użyć atrybutu use_in
na polu, aby określić odpowiedni zasób do wyświetlenia pola. Może to być list
lub detail
lub wywołanie zwrotne.
To powinna być główna odpowiedź. O wiele bardziej oczywiste i jasne niż nadrzędne metody. – Radagast
Jest to jeden z tych przypadków, w których powinieneś być w stanie zmienić "Zatwierdzoną" odpowiedź dla tych z nas, którzy przyjdą później na imprezę. –
Można również użyć metody odwodnienia (self, wiązka).
def dehydrate(self, bundle): del bundle.data['attr-to-del] return bundle
- 1. Drupal: Widoki: relacje grupowania na liście bloków
- 2. R - „nie wyświetlać na liście” metody liście niestandardowych klas
- 3. Python: czy unittest może wyświetlać oczekiwane i rzeczywiste wartości?
- 4. Jak wykryć, czy zestaw zestawów zawiera inny zestaw?
- 5. Jak zdobyć każdy inny element na liście?
- 6. przycisk Usuń usuwać na pierwszy zestaw pól
- 7. Nieznana kolumna na liście pól. PHP + Mysql
- 8. Wariadyczne szablony, zestaw parametrów i omówione niejednoznaczności na liście parametrów
- 9. Czy itextsharp.xmlworker może wyświetlać osadzone obrazy?
- 10. Czy bash może wyświetlać definicję funkcji?
- 11. Czy ffmpeg może wyświetlać pasek postępu?
- 12. Czy MvcMiniProfiler może wyświetlać wartości parametrów SQL?
- 13. Sprawdź, czy czcionka niestandardowa może wyświetlać znak
- 14. Zestaw pól obiektu z HashMap
- 15. Czy skrypt PHP może uruchomić inny skrypt PHP i zakończyć?
- 16. Czy można wyświetlać wiele pól w jednym nagłówku Vary?
- 17. C# czy inny skrót
- 18. Jak wyświetlać paski przewijania na liście aplikacji w usłudze onsen?
- 19. Ustawianie reCAPTCHA wersja 2 zestaw inny język inny niż angielski
- 20. Widoki ApiControllers i Razor
- 21. Używanie niestandardowej usługi VirtualPathProvider do ładowania zasobu osadzonego Częściowe widoki
- 22. Zestaw kwerend Django __in z wartością Brak na liście
- 23. Czy w systemie Linux proces może wyświetlać GUI innego procesu?
- 24. Czy Google Analytics może wyświetlać mi wizytę po godzinie?
- 25. MYSQL - błąd INSERT, nieznana kolumna na liście pól
- 26. Automapper nie może wyświetlić jednego typu wyliczeniowego na inny
- 27. Hibernate: Nieznany kolumny w liście pól
- 28. Czy git może wyświetlać znaczniki występujące między dwoma określonymi zatwierdzeniami?
- 29. Jak sprawdzić, czy moja aplikacja może wyświetlać powiadomienia?
- 30. Kolumna "user_id" w liście pól jest niejednoznaczna.
To jest dobry pomysł, a ja doceniam twoją odpowiedź. Zastanawiam się jednak, czy istnieje sposób na odłożenie pól z pierwotnego zapytania, aby uniknąć wysyłania dość dużych pól przez przewód. – Carson
Proponuję Ci po prostu utworzyć 2 zasoby, takie, które pokazują wszystkie pola i inne, które pokazuje tylko twój podzbiór na tym samym modelu. Jest to najprostszy sposób bez większego nadmiaru. Jeśli nalegasz na to, że jest to ten sam zasób, możesz postępować zgodnie z moimi początkowymi zaleceniami dotyczącymi przeciążania get_list, aby uwzględnić tylko podzbiór pól podczas pobierania z ORM i serializacji. – astevanovic
Powinny być "del obj.data [nazwa pola]". – Mitar