2015-11-03 2 views
3

Я работаю над проектом Django 1.8, который должен выставлять как традиционный интерфейс HTML, так и JSON API. Для API мы используем Django Rest Framework. Работая с Rails, я стараюсь следовать шаблону «Толстые модели» и ставить столько же, сколько по-человечески возможно в модели и вдали от формы. Иногда, однако, существует специальная проверка, которая должна выполняться на уровне формы.Как избежать дублирования кода в Django Forms и Django Rest Framework Сериализаторы?

Пример: У меня есть модель Image с полем GenericForeignKey и потенциально может быть связана с любой моделью в системе. Эти изображения также имеют profile (например, «логотип», «баннер» и т. Д.). В зависимости от профиля мне нужно сделать другую проверку. В принципе, я просто создавал разные классы форм для разных профилей, но также можно было бы назначать изображения объектам через API. Как я могу избежать дублирования этой пользовательской проверки как в формах, так и в сериализаторах?

+1

Как насчет этого? http://www.django-rest-framework.org/api-guide/renderers/#htmlformrenderer Я нашел его здесь http://stackoverflow.com/questions/30047855/django-rest-framework-form может быть это может быть полезно –

ответ

1

я обычно делаю это в моем сериализаторе:

def validate(self, attrs): 
    # custom serializer validation 

    self.myform = self.myform_class(
     data=attrs 
    } 

    if not self.myform.is_valid(): 
     raise serializers.ValidationError() 
    return attrs 

Таким образом, я могу повторно использовать форму проверку и добавить пользовательскую проверку сериализатора в то же время + использовать оба встроенных валидатор.

Сообщите мне, если это поможет, и если возможно, вы можете бросить фрагменты кода, чтобы мы могли выяснить ваш конкретный случай.

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