Size: a a a

Django [ru] #STAY HOME

2019 April 03

s

st4rtr00p3r in Django [ru] #STAY HOME
привет, не подскажите, где про drf валидаторы почитать можно кроме оф  документации. Вкурить никак не могу как ими пользоваться, кроме как просто в конструкторе сериализатора required, allow_null, и прочее вызывать
источник

D

Dmitry in Django [ru] #STAY HOME
st4rtr00p3r
привет, не подскажите, где про drf валидаторы почитать можно кроме оф  документации. Вкурить никак не могу как ими пользоваться, кроме как просто в конструкторе сериализатора required, allow_null, и прочее вызывать
можно самому прописывать методы в сериалайзере, например def validate_fieldname(self):
источник

DT

Dan Tyan in Django [ru] #STAY HOME
там есть метод validate и методы validate_FIELD_NAME

в первом проверяешь общую логику
во вторых по каждому полю
источник

DT

Dan Tyan in Django [ru] #STAY HOME
валидатор должен возвращать либо значение либо выкидывать исключение
источник

D

Dmitry in Django [ru] #STAY HOME
st4rtr00p3r
привет, не подскажите, где про drf валидаторы почитать можно кроме оф  документации. Вкурить никак не могу как ими пользоваться, кроме как просто в конструкторе сериализатора required, allow_null, и прочее вызывать
там не так много кода, можно прямо в сорцах глянуть. Вообще весь DRF если не ошибаюсь около 15-20к строк. Причем код очень понятный и легко читается:)
источник

s

st4rtr00p3r in Django [ru] #STAY HOME
т.е. любая функция с припиской "validate_"?
источник

DT

Dan Tyan in Django [ru] #STAY HOME
метод класса сериализатора
источник

V💊

Vladimir 💊 Voytenko in Django [ru] #STAY HOME
а раз уж зашла тема про валидаторы в дрф, подскажите как поступить если я не хочу держать логику в сериализаторах, а хочу все держать в моделях. как быть с валидацией?
источник

DT

Dan Tyan in Django [ru] #STAY HOME
укажи валидаторы в поле модели
источник

s

st4rtr00p3r in Django [ru] #STAY HOME
Dan Tyan
метод класса сериализатора
class *Serializer(serializers.Serializer):
   def validate_*():
или пофиг на имя функции?
источник

V💊

Vladimir 💊 Voytenko in Django [ru] #STAY HOME
st4rtr00p3r
class *Serializer(serializers.Serializer):
   def validate_*():
или пофиг на имя функции?
validate_FIELD_NAME
источник

DT

Dan Tyan in Django [ru] #STAY HOME
def validate_<FIELD>(self, value):
источник

s

st4rtr00p3r in Django [ru] #STAY HOME
Vladimir 💊 Voytenko
а раз уж зашла тема про валидаторы в дрф, подскажите как поступить если я не хочу держать логику в сериализаторах, а хочу все держать в моделях. как быть с валидацией?
джанговские можно подключить:
from django.core.validators import *
в моделе:
field  = models.IntegerField(validators=[MinValueValidator(0), MaxValueValidator(1000)]
источник

s

st4rtr00p3r in Django [ru] #STAY HOME
спасибо
источник

DT

Dan Tyan in Django [ru] #STAY HOME
ну можно и свои написать =)
источник

V💊

Vladimir 💊 Voytenko in Django [ru] #STAY HOME
Dan Tyan
укажи валидаторы в поле модели
спасибо, не подумал про это
источник

DT

Dan Tyan in Django [ru] #STAY HOME
учитывай что валидатор будет вызываться только при сохранении из сериализатора или формы
источник

DT

Dan Tyan in Django [ru] #STAY HOME
при прямом создании валидаторы вызываться не будут
источник

V💊

Vladimir 💊 Voytenko in Django [ru] #STAY HOME
Dan Tyan
учитывай что валидатор будет вызываться только при сохранении из сериализатора или формы
двойное спасибо, ты решил еще одну мою проблему, как раз не нужны были валидаторы при сохранении не через api)
источник

DT

Dan Tyan in Django [ru] #STAY HOME
нет при вызове с апи валидаторы вызываться БУДУТ если сохраняться с помощью сериализаторов
НЕ будет если будешь напрямую создавать Model.objects.create(**attrs)
источник