Size: a a a

Django [ru] #STAY HOME

2021 April 06

Р

Руслан in Django [ru] #STAY HOME
Dennis Pashnev
Я создаю модуль tests где тестирую отдельно логику, модели и т.д.
Основной код допишу и сделаю папку в каждом приложении "tests" и там размещу тесты
источник

Р

Руслан in Django [ru] #STAY HOME
Спасибо)
источник

DP

Dennis Pashnev in Django [ru] #STAY HOME
Руслан
Основной код допишу и сделаю папку в каждом приложении "tests" и там размещу тесты
Если собираешься пилить проект с кем-то то коротенькое README обязательно
источник

Р

Руслан in Django [ru] #STAY HOME
Dennis Pashnev
Если собираешься пилить проект с кем-то то коротенькое README обязательно
Это дело в процессе
источник

Н

Не выходи из комнаты... in Django [ru] #STAY HOME
и докер собери, что ль
источник

Р

Руслан in Django [ru] #STAY HOME
Не выходи из комнаты.
и докер собери, что ль
Как же без этого
источник

Р

Руслан in Django [ru] #STAY HOME
Сокеты допишу и надо собирать
источник

AD

Alex Dem in Django [ru] #STAY HOME
Руслан
Народ, если есть время - прокомментируйте код

https://github.com/II9tka/blog
1) Это ужасно читается (не читается вообще)
   
Разбей на строки, раскидай по переменным


def _get_image_args(self, validated_data) -> Tuple[str, Dict[str, Any]]:
       """
       :return ("image", {"image": InMemoryUploadedFile <...> or TemporaryUploadedFile <...>})
       """

       return tuple(*{
           field_name: value for field_name, value in validated_data.items()
           if isinstance(value, dict) and self._get_image_args(value)
           or any([isinstance(value, InMemoryUploadedFile), isinstance(value, TemporaryUploadedFile)])
       }.i

2) def _get_user(self) -> Any or None:

Во-первых, Optional[Any]
Во-вторых это неправда
В-третьих, зачем нужны типы, если возращаешь Optinal Any? Шоб було?
источник

AD

Alex Dem in Django [ru] #STAY HOME
3)    def _common_related(self):
       model = self.model
       qs = self.all()

       if getattr(model, 'COMMON_SELECT_RELATED', None):
           qs = qs.select_related(*model.COMMON_SELECT_RELATED)
       if getattr(model, 'COMMON_PREFETCH_RELATED', None):
           qs = qs.prefetch_related(*model.COMMON_PREFETCH_RELATED)
       return qs

   def with_common_related(self):
       return self._common_related()

зачем нужен with_common_related метод?
Мусорный код

почему модель должна знать о префетчах и селектах?
это должно быть в сериалайзерах
источник

AD

Alex Dem in Django [ru] #STAY HOME
4) ChatGroupViewSet(mixins.CreateModelMixin,
                      mixins.ListModelMixin,
                      mixins.DestroyModelMixin,
                      mixins.UpdateModelMixin,
                      viewsets.GenericViewSet)

если я не ошибаюсь, это уже полноценный ModelViewSet
точно ли есть смысл отдельно миксины прописывать?
источник

Р

Руслан in Django [ru] #STAY HOME
1) Ну на счёт Any or None:
Видел в описании Any, что Any применятся при возвращении объекта.

2) Не совсем понял, как такую логику (как в моделях) реализовать в сериализоторах, но во всяком случае тогда перенесу во вьюшки

3) Не совсем) Там нет mixins.RetrieveModelMixin, поскольку он там не нужен
источник

Р

Руслан in Django [ru] #STAY HOME
На счёт того, что ужасно читается - уже давно думал
источник

AD

Alex Dem in Django [ru] #STAY HOME
Руслан
1) Ну на счёт Any or None:
Видел в описании Any, что Any применятся при возвращении объекта.

2) Не совсем понял, как такую логику (как в моделях) реализовать в сериализоторах, но во всяком случае тогда перенесу во вьюшки

3) Не совсем) Там нет mixins.RetrieveModelMixin, поскольку он там не нужен
а толку от такой типизации?
по идее, надо бы указать Optional[User]
источник

Р

Руслан in Django [ru] #STAY HOME
Alex Dem
а толку от такой типизации?
по идее, надо бы указать Optional[User]
Он может вернуть None
источник

AD

Alex Dem in Django [ru] #STAY HOME
Руслан
Он может вернуть None
Естественно, поэтому Optional[]
источник

Р

Руслан in Django [ru] #STAY HOME
Понял, спасибо)
источник

Р

Руслан in Django [ru] #STAY HOME
Ещё что-нибудь?)
источник

AD

Alex Dem in Django [ru] #STAY HOME
2) Не совсем понял, как такую логику (как в моделях) реализовать в сериализоторах, но во всяком случае тогда перенесу во вьюшки

Не надо во вьюшки
У тебя динамический сериализатор
источник

AD

Alex Dem in Django [ru] #STAY HOME
Пишешь префетчи и пре-селекты - здорово
Но их надо держать в том месте где происходит сериализация
источник

AD

Alex Dem in Django [ru] #STAY HOME
У меня в проекте каждый ViewSet имеет по 3-8 сериализаторов, поверь лучше сразу хранить по месту применения
источник