Size: a a a

Django [ru] #STAY HOME

2019 April 30

VT

Vadim Tepes in Django [ru] #STAY HOME
Ivan Kasatkin
А что значит не заточена, что именно в ней отсуствует, для нормальной работы с mongo?
ее годами делали для реляционных баз данных, а в нереляционных совсем другой принцип работы
источник

VT

Vadim Tepes in Django [ru] #STAY HOME
Что бы добавить поддержку, там чуть ли не всё нужно переписать
источник

V

Valera in Django [ru] #STAY HOME
Подскажите еще раз плиз.
У меня вот есть модель. Она инициализируется только один раз в проекте. Мне нужно эту модель замокатать (заменить на фековую, которую я создал специально для этого). Как это можно сделать в тестах?
источник

V

Valera in Django [ru] #STAY HOME
Вот код, с которым проблема:
@patch('common.video.Video')
   def test_create(self, mock_video):
       mock_video.return_value = FakeVideo()
       
       data = {
           'video_source': {
               'origin': {
                   'size': 512000
               }
           },
           'approach': 'post',
           'name': 'Video Test'
       }

       url = self.reverse('video-list')
       response = self.client.post(url, data)

       self.assertEqual(response.status_code, HTTP_201_CREATED)

По идее должны работать при тесте вме методы класса FakeVideo() но все равно берутся оснвоного - Video()
источник

TD

Timur Daukaev in Django [ru] #STAY HOME
Valera
Вот код, с которым проблема:
@patch('common.video.Video')
   def test_create(self, mock_video):
       mock_video.return_value = FakeVideo()
       
       data = {
           'video_source': {
               'origin': {
                   'size': 512000
               }
           },
           'approach': 'post',
           'name': 'Video Test'
       }

       url = self.reverse('video-list')
       response = self.client.post(url, data)

       self.assertEqual(response.status_code, HTTP_201_CREATED)

По идее должны работать при тесте вме методы класса FakeVideo() но все равно берутся оснвоного - Video()
Мне кажется, именно в таком случае надо мокать не common.video.Video, а common.video.Video.__new__.

Или сделать какую-нибудь функцию, которая возвращает инстанс Video, и мокать её.
источник

V

Valera in Django [ru] #STAY HOME
Timur Daukaev
Мне кажется, именно в таком случае надо мокать не common.video.Video, а common.video.Video.__new__.

Или сделать какую-нибудь функцию, которая возвращает инстанс Video, и мокать её.
Первый варинат не сработал, сейчас буду пробовать второй. Надеюсь получится, потому что чет я вообще запутался в этом.

То есть мне надо будет что-то типо такого сделать?

def return_video():
   video = Video()
   return video

@pathc('.return_video')
def test_create(self, mock_video):
   ...
источник

TD

Timur Daukaev in Django [ru] #STAY HOME
Valera
Первый варинат не сработал, сейчас буду пробовать второй. Надеюсь получится, потому что чет я вообще запутался в этом.

То есть мне надо будет что-то типо такого сделать?

def return_video():
   video = Video()
   return video

@pathc('.return_video')
def test_create(self, mock_video):
   ...
Ну да, что-то наподобие
Но и в реальном коде тогда надо вызывать эту функцию, а не инстанцировать Video напрямую.
источник

СГ

Саша Горелик in Django [ru] #STAY HOME
Несколько моделей  наследуютт от родительской.  Можно ли получить всех объектов-детей по запросы через родительскую модель? Чтобы Parent.objects.all выдавало ChildA.objects.all + ChildB.objects.all и т.д., причем в порядке родительского индекса?
источник

AS

Anatoly Shirokov in Django [ru] #STAY HOME
Саша Горелик
Несколько моделей  наследуютт от родительской.  Можно ли получить всех объектов-детей по запросы через родительскую модель? Чтобы Parent.objects.all выдавало ChildA.objects.all + ChildB.objects.all и т.д., причем в порядке родительского индекса?
в случае с Multi-table inheritance так и будет https://docs.djangoproject.com/en/2.2/topics/db/models/#multi-table-inheritance
источник

AS

Anatoly Shirokov in Django [ru] #STAY HOME
Parent.objects.all() вернет всех наследников
источник

СГ

Саша Горелик in Django [ru] #STAY HOME
А, ну да, спасибо. Продолжение вопроса! Две модели  наследуютт от модели Parent. Для ChildA определен str и для ChildB определен str. Как сделать чтобы str для Parent соответственно отдавал str детей?
источник

AS

Anatoly Shirokov in Django [ru] #STAY HOME
Саша Горелик
А, ну да, спасибо. Продолжение вопроса! Две модели  наследуютт от модели Parent. Для ChildA определен str и для ChildB определен str. Как сделать чтобы str для Parent соответственно отдавал str детей?
я бы сделал в Parent поле name, в которое бы записывал требуемое для str выражение, все остальное будет пенальти для производительности
источник

СГ

Саша Горелик in Django [ru] #STAY HOME
Anatoly Shirokov
я бы сделал в Parent поле name, в которое бы записывал требуемое для str выражение, все остальное будет пенальти для производительности
результат str зависит от того какой из классов-детей у объекта. Т.е. если это выяснять на уровне родителя - нужно ещё какую-то условную конструкцию, как-то неизящно.
источник

AS

Anatoly Shirokov in Django [ru] #STAY HOME
Саша Горелик
результат str зависит от того какой из классов-детей у объекта. Т.е. если это выяснять на уровне родителя - нужно ещё какую-то условную конструкцию, как-то неизящно.
просто при записи child-ы будут в name помещать требуемое для формирования имени выражение. тогда на уровне Parent не потребуется знать с каким типом мы работаем
источник

AS

Anatoly Shirokov in Django [ru] #STAY HOME
он будет просто возвращать self.name
источник

AS

Anatoly Shirokov in Django [ru] #STAY HOME
@gorelikspb можете еще эту технику посмотреть https://schinckel.net/2016/04/30/multi-table-inheritance-and-the-django-admin/
источник

AS

Anatoly Shirokov in Django [ru] #STAY HOME
где учавствует метаинформация
источник

СГ

Саша Горелик in Django [ru] #STAY HOME
спасибо!
источник

RB

Rostislav Biloshapka in Django [ru] #STAY HOME
Привет всем!
Как общаться между микросервисами?
Например мне при сохранении статьи нужно отправить некоторые данные на микросервис который их обработает и сохранит в свою бд. Я делаю сигнал, отправляю задачу celery в которой я как-то должен отправить на микросервис, только не знаю как правильно это делать. Пока пробовал через requests.
источник

AS

Anatoly Shirokov in Django [ru] #STAY HOME
Rostislav Biloshapka
Привет всем!
Как общаться между микросервисами?
Например мне при сохранении статьи нужно отправить некоторые данные на микросервис который их обработает и сохранит в свою бд. Я делаю сигнал, отправляю задачу celery в которой я как-то должен отправить на микросервис, только не знаю как правильно это делать. Пока пробовал через requests.
по хорошему, если в обмене между микросервисами не предусмотрена синхронность (один ожидает результат действий другого), то обычно между микросервисами ставят MOM (message oriented middleware), или другими словами, организуют очереди.
источник