2017-02-19 4 views
1

В моих моделях у меня есть UserProfile, у которого есть поле под названием public_profile. Сериализатору для Event модели (другая модель):Django Rest динамически выбирает поля для рендеринга

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 многие-ко-многим в базе данных для UserProfile. Мой вопрос заключается в том, как я могу выбрать, какие поля отображать в UserProfSerializer в зависимости от конфигурации профиля, если он является общедоступным или нет. Например, я хочу показать изображение пользователя pk и профиля, но не имя пользователя.

ответ

2

Вы можете перезаписать метод 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 
+0

Спасибо, что работал! –

+0

Не забудьте проголосовать за ответ, если вам это нравится:] – JoseKilo

 Смежные вопросы

  • Нет связанных вопросов^_^