Использование функции validate filename во всех стерилизаторах Django
У меня есть функция validate_filename в сериализаторе, но похоже, что я должен использовать одну и ту же функцию в нескольких классах сериализатора для проверки имени файла. Это не очень хорошо, потому что кажется избыточным, и концепция DRY не реализуется.
Например:
class ExampleOne(serializers.ModelSerializer):
class Meta:
model = ExampleOne
fields =['']
def create(self, validated_data): ...
return item
def validate_extension(filename):
extension = os.path.splitext(filename)[1].replace(".", "")
if extension.lower() not in ALLOWED_IMAGE_EXTENSIONS:
raise serializers.ValidationError(
(f'Invalid uploaded file type: {filename}'),
code='invalid',
Теперь мне нужно использовать ту же функцию в других классах сериализаторов внутри того же файла сериализатора, и я не хочу повторять тот же код снова. Есть ли способ использовать отдельный файл типа validatefile.py и импортировать функцию только внутри класса сериализатора? Но я не знаю, как начать и продолжить.
Вы можете иметь отдельный класс, в котором вы можете иметь функцию, которую вы не хотите повторять. Затем вы можете наследовать этот класс вместе с классом ModelSerializer везде, где вам нужна функция, чтобы не повторяться.
Вы можете сделать следующее:
class CustomModelSerializer(serializers.ModelSerializer):
def validate_filename(self, filename):
# validate filename here..
return filename
class ExampleOne(CustomModelSerializer):
class Meta:
model = ExampleOne
fields =['']
def create(self, validated_data): ...
return item
def validate_extension(filename):
extension = os.path.splitext(filename)[1].replace(".", "")
if extension.lower() not in ALLOWED_IMAGE_EXTENSIONS:
raise serializers.ValidationError(
(f'Invalid uploaded file type: {filename}'),
code='invalid',