Уведомления

Группа в Telegram: @pythonsu

#1 Май 4, 2014 15:53:40

maxfox
Зарегистрирован: 2013-07-27
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

ManyToMany c промежуточной моделью и .add

Здравствуйте!

Столкнулся с проблемой при явном указании промежуточной модели в ManyToMany.
Проблема в том, что не работает метод add. Проблема описана в документации, но суть ее мне не очень ясна. Есть ли какие-то пути обхода, например прописать свой метод add и задать кастомный ManyRelatedManager. Хотелось бы узнать у более опытных коллег, возможно ли такое и чем это чревато..

Офлайн

#2 Май 4, 2014 19:24:37

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

ManyToMany c промежуточной моделью и .add

maxfox
В чем проблема ?
Если не надо хранить никакие данные используй просто поле, а если надо еще хранить явно указываешь
модель.

Почему нет .add ?
Да потому что ты можешь просто создавать новую запись и указывать дополнительные данные, а с add это не очень удобно + не очень явно.

Если хочешь сделай в модели свой метод
def add(self, model, **kwargs):
_ThrowModel.objects.create(fk_1= self,fk_2= model, **kwrags)

Офлайн

#3 Май 4, 2014 19:47:05

maxfox
Зарегистрирован: 2013-07-27
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

ManyToMany c промежуточной моделью и .add

Спасибо!
Насчет метода думал, но хотелось через .add самого поля.

Вдогонку еще вопрос: как сделать так, чтобы при создании экземпляра модели, в которой есть m2m через through, поле с m2m было обязательным к заполнению?

Т.е. к примеру есть книга и автор, авторов может быть много, но должен быть хотя бы один. Сейчас мне django позволяет создать и сохранить объект с незаполненным m2m полем, хотя blank и null не указаны.

Отредактировано maxfox (Май 4, 2014 19:51:47)

Офлайн

#4 Май 4, 2014 22:11:14

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

ManyToMany c промежуточной моделью и .add

maxfox
это в форме надо делать такое
добавить поле с required

Офлайн

#5 Май 5, 2014 20:18:18

maxfox
Зарегистрирован: 2013-07-27
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

ManyToMany c промежуточной моделью и .add

Спасибо за ответы, но появился еще один вопрос по m2m с кастомной промежуточной таблицей.
При использовании ModelForm я (в идеальном случае) просто делаю form.save()
Как быть, если при этом нужно еще создать m2m связь? Сделать это вручную во view?
У меня в методе create менеджера модели прописано создание записи в промежуточной таблице, но, получается, что это без толку, т.к. форма не использует метод create, а создает объект через конструктор.

Короче, как-то все через одно место получается, или я чего-то не понимаю в Django и его логике..

Офлайн

#6 Май 5, 2014 20:40:43

pythonlove
Зарегистрирован: 2014-04-22
Сообщения: 16
Репутация: +  4  -
Профиль   Отправить e-mail  

ManyToMany c промежуточной моделью и .add

Вы можете использовать сигналы, например django.db.models.signals.post_save

from django.dispatch import receiver
from django.db.models import signals
@receiver(signals.post_save, sender=YourModel):
def your_model_post_save(sender, instance, created, **kwargs):
    # create something

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version