/ / Django Rest динамічно вибирає поля для візуалізації - django, django-rest-framework

Django Rest динамічно вибирає поля для візуалізації - django, django-rest-frame

У своїх моделях я маю UserProfile що має поле під назвою public_profile. Серіалізатор для Event модель (інша модель) - це:

class EventSerializer(serializers.ModelSerializer):

going = UserProfSerializer(read_only=True, many=True)
notGoing = UserProfSerializer(read_only=True, many=True)

class Meta:
model = Event
fields = ("name", "place", "date", "going", "notGoing", "slug")

Де going і notGoing є відношенням багато до багатьох у базі данихПрофіль користувача. Моє питання полягає в тому, як я можу вибрати, які поля відображати в UserProfSerializer, залежно від конфігурації профілю, загальнодоступний він чи ні. Наприклад, я хочу, щоб користувач pk та зображення профілю відображалися, але не ім’я користувача.

Відповіді:

3 для відповіді № 1

Ви можете замінити to_representation спосіб:

class UserProfSerializer(serializers.ModelSerializer):

PUBLIC_FIELDS = ("id", "avatar")

class Meta:
model = UserProfile
fields = ("id", "username", "avatar")

def to_representation(self, obj):
response = super(UserProfSerializer, self).to_representation(obj)
if not obj.public_profile:
for field in response:
if field not in self.PUBLIC_FIELDS:
del response[field]
return response