Форум сайта python.su
Здравствуйте!
Столкнулся с проблемой при явном указании промежуточной модели в ManyToMany.
Проблема в том, что не работает метод add. Проблема описана в документации, но суть ее мне не очень ясна. Есть ли какие-то пути обхода, например прописать свой метод add и задать кастомный ManyRelatedManager. Хотелось бы узнать у более опытных коллег, возможно ли такое и чем это чревато..
Офлайн
maxfox
В чем проблема ?
Если не надо хранить никакие данные используй просто поле, а если надо еще хранить явно указываешь
модель.
Почему нет .add ?
Да потому что ты можешь просто создавать новую запись и указывать дополнительные данные, а с add это не очень удобно + не очень явно.
Если хочешь сделай в модели свой метод
def add(self, model, **kwargs):
_ThrowModel.objects.create(fk_1= self,fk_2= model, **kwrags)
Офлайн
Спасибо!
Насчет метода думал, но хотелось через .add самого поля.
Вдогонку еще вопрос: как сделать так, чтобы при создании экземпляра модели, в которой есть m2m через through, поле с m2m было обязательным к заполнению?
Т.е. к примеру есть книга и автор, авторов может быть много, но должен быть хотя бы один. Сейчас мне django позволяет создать и сохранить объект с незаполненным m2m полем, хотя blank и null не указаны.
Отредактировано maxfox (Май 4, 2014 19:51:47)
Офлайн
maxfox
это в форме надо делать такое
добавить поле с required
Офлайн
Спасибо за ответы, но появился еще один вопрос по m2m с кастомной промежуточной таблицей.
При использовании ModelForm я (в идеальном случае) просто делаю form.save()
Как быть, если при этом нужно еще создать m2m связь? Сделать это вручную во view?
У меня в методе create менеджера модели прописано создание записи в промежуточной таблице, но, получается, что это без толку, т.к. форма не использует метод create, а создает объект через конструктор.
Короче, как-то все через одно место получается, или я чего-то не понимаю в Django и его логике..
Офлайн
Вы можете использовать сигналы, например 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
Офлайн