Size: a a a

Django [ru] #STAY HOME

2021 June 01

NC

Nikolay Cherniy in Django [ru] #STAY HOME
использовать постгрес
источник

НК

Никита Кадацкий... in Django [ru] #STAY HOME
Добрый вечер всем, хочу расширить модель (связь много-ко-многому) для категории (добавить столбец для хранения весов) делал по доке, но выдает ошибку myadmin.Competition.category: (fields.E339) 'Category_weights.category' is not a foreign key to 'Competition'.
       HINT: Did you mean one of the following foreign keys to 'Competition': competition?  https://pastebin.com/0AFK11db
источник

NC

Nikolay Cherniy in Django [ru] #STAY HOME
through_fields=('competition', 'category')
источник

НК

Никита Кадацкий... in Django [ru] #STAY HOME
ValueError: Cannot alter field myadmin.Competition.category into myadmin.Competition.category - they are not compatible types (you cannot alter to or from M2M fields, or add or remove through= on M2M fields)    Выбивала раньше
источник

NC

Nikolay Cherniy in Django [ru] #STAY HOME
нельзя мигрировать с автоматической промежуточной таблицы на through. у тебя 2 питон?
источник

НК

Никита Кадацкий... in Django [ru] #STAY HOME
нет, 3.7.4
источник

NC

Nikolay Cherniy in Django [ru] #STAY HOME
зачем тогда u-string используешь? ну и в целом f-stringов нет, пепу не следуешь, форматирование ужасное =(
источник
2021 June 02

DP

Dennis Pashnev in Django [ru] #STAY HOME
Привет, нормальная ли практика в менеджере модели юзать префетчи? Или менеджер не должен знать про связанные поля?
источник

АБ

Артем Бутаков... in Django [ru] #STAY HOME
полагаю, что менеджер должен обслуживать только ту модель, для которой создан. по крайней мере я бы не стал в него совать ничего лишнего
источник

K

KℝIℙ₮Oℕ in Django [ru] #STAY HOME
а в двух словах может кто объяснить, что такое менеджер?) Не улавливаю суть прост)
источник

DP

Dennis Pashnev in Django [ru] #STAY HOME
Я хочу написать метод, где буду ссылаться на mtm поле, но почему-то подумал что менеджер не должен знать про связи
источник

АБ

Артем Бутаков... in Django [ru] #STAY HOME
Так напиши функцию просто для получения нужной инфы, зачем менеджер для этого делать. Менеджер используется для удобного получения определенных объектов модели по параметрам, которые используются очень часто. Префетчить связанные объекты - плохая идея, имхо
источник

DP

Dennis Pashnev in Django [ru] #STAY HOME
Почему плохая идея? Удобное получение объектов по параметрам это разве не фильтрация?
источник

АБ

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

DP

Dennis Pashnev in Django [ru] #STAY HOME
Понял тебя :) Спасибо
источник

AD

Alex Dem in Django [ru] #STAY HOME
префетчи склонны жрать память, согласен с оратором выше - стоит их юзать по месту использования - это первый момент

второй момент - по контексту вопроса могу предположить, что речь о каком-то queryset с связанными таблицами - если так, то в принципе для таких вещей нужно писать логику в Queryset объекте, не в model manager

model manager, IMO, должен хранить логику и методы на уровне инстанса модели, всякие хитровыдуманные методы создания/удаления инстанса, или списка инстансов обслуживаемой модели(какой-нибудь свой bulk_create с казино и куртизанками)
источник

DP

Dennis Pashnev in Django [ru] #STAY HOME
Да как раз таки использую QuerySet в связке с менеджером, имеется кастомное создание инстанса в менеджере, все фильтры и получение данных описаны в QuerySet, в менеджере просто создаю методы для вызова фильтраций кверисета
источник

DP

Dennis Pashnev in Django [ru] #STAY HOME
Но перед вызовом фильтра нужно юзнуть префетч, написал его в менеджере и засомневался, уже перенес префетч в метод get_queryset
источник

AD

Alex Dem in Django [ru] #STAY HOME
если есть какая-то сложная БЛ, лучше действительно создать отдельный скриптик my_awesome_business_logic, пихнуть туда функцию, а в ModelManager просто создать метод-обёртку над этой функцией

модели лучше сразу держать в стерильной чистоте :)
источник

AD

Alex Dem in Django [ru] #STAY HOME
ну и все необходимые префетчи, конечно же, запихать в эту функцию
источник