Укажите поле внешнего ключа, которое должно быть исключено в ModelSerializer
Сначала позвольте мне рассказать вам о проблеме и моем решении.
У меня есть модель с именем ProfileInfo, которая наследуется от абстрактных моделей PersonInfo и CompanyInfo. Каждая из этих абстрактных моделей имеет свои собственные сериализаторы (ModelSerializer), указывающие на ProfileInfo модели.
Предположим, что это поля компании, которые исключены из PersonInfoSerializer и наоборот.
Я добавил поле только для чтения is_filled, которое показывает, заполнена ли информация о профиле или нет:
class PersonInfoSerializer(serializers.ModelSerializer):
user = serializers.SerializerMethodField()
is_filled = serializers.SerializerMethodField(allow_null=True)
class Meta:
model = ProfileInfo
exclude = [
"company_name",
"company_tax_file",
]
def get_is_filled(self, obj):
data = obj.__dict__
fields = data.keys() - set(self.Meta.exclude)
is_filled = True
for field in fields:
if data[field] is None:
is_filled = False
break
return is_filled
Ошибка, которую я получаю, гласит:
AssertionError: Поле 'company_tax_file_id' было включено в сериализатор PersonInfoSerializer в опции 'exclude', но не соответствует ни одному полю модели.
Обратите внимание, что company_tax_file является полем отношения FK в CompanyInfo и я хочу быть исключенным.
Как бы вы написали метод get_is_filled?