РЕДАКТИРОВАТЬ
Я просто хочу вызвать исключение, когда я делаю BrokerSerializer(user).data
, и любое из значений None
Я использую DRF для сериализации объектовчтобы экспортировать их через API, я не использую его для создания объектов.
Ищу самый простой способ сделать поля обязательными при сериализации модели.
API требует, чтобы некоторые поля были не нулевыми, поэтому я хочу увеличить APIMissingDataException
, если какое-либо из них имеет значение null / None.
Я пытался:
class BrokerSerializer(serializers.ModelSerializer):
import_id = serializers.IntegerField(source='pk')
deleted = serializers.SerializerMethodField()
full_name = serializers.CharField(source='userprofile.get_display_name')
phone_work = serializers.CharField(source='userprofile.contact_information.telephone')
email_work = serializers.CharField(source='userprofile.contact_information.email')
class Meta:
model = User
fields = ['import_id', 'deleted', 'full_name', 'phone_work', 'email_work']
required_fields = fields
def validate(self, attrs):
super().validate(attrs)
if not all([attrs.get(fieldname) for fieldname in self.Meta.required_fields]):
raise APIMissingDataException()
return attrs
def get_deleted(self, obj):
return 0
Но функция validate
по какой-то причине не вызывается.Я не хочу явно определять все поля, просто чтобы добавить к ним required=False
параметров.
In [10]: b = BrokerSerializer(User.objects.first())
In [11]: b.data
# It should have raised exception since there are None
Out[11]: {'import_id': 1, 'deleted': 0, 'full_name': None, 'phone_work': None, 'email_work': None}
In [12]: b = BrokerSerializer(data=User.objects.first())
In [13]: b.is_valid()
Out[13]: False
In [14]: b.data
Out[14]: {}
Есть ли более удобный способ?