У меня есть следующие модели:Проверка на ManyToManyField перед сохранением в models.py
class Application(models.Model):
users = models.ManyToManyField(User, through='Permission')
folder = models.ForeignKey(Folder)
class Folder(models.Model):
company = models.ManyToManyField(Compnay)
class UserProfile(models.Model):
user = models.OneToOneField(User, related_name='profile')
company = models.ManyToManyField(Company)
То, что я хотел бы сделать, это проверить, имеет ли один из пользователей Заявке той же компании, как заявка (через папку). Если это так, экземпляр приложения не должен быть сохранен.
Проблема в том, что ManyToManyFields не обновляются до тех пор, пока не будет получен сигнал «после сохранения».
Единственным вариантом является новый сигнал m2m_changed. Но я не уверен, как я откат назад, что уже произошло.
Другим вариантом было бы переписать функцию сохранения (в models.py, потому что я говорю об этом здесь), но я не уверен, как получить доступ к содержимому manytomanyfield.
Наконец-то я прочитал что-то о переписывании функции сохранения в администраторе модели в admin.py, однако я все равно не знаю, как вы получите доступ к содержимому manytomanyfield.
Я искал это везде, но ничего, с которым я сталкиваюсь, похоже, работает на меня.
Если что-то неясно, сообщите мне.
Благодарим за помощь!
Heleen
Почему у вас есть ManyToManyField для UserProfile.company и Folder.company? Может ли пользователь/папка быть в нескольких компаниях? В этом случае я предлагаю переименовать поля в «компании». –
Компании действительно были бы лучшим именем. Мне нужно, чтобы пользователи были сотрудниками нескольких компаний.Папка может принадлежать нескольким компаниям. Оба случая, вероятно, будут исключениями, но они по-прежнему должны быть возможны. – Heyl1
Я не уверен, как вы можете это сделать с помощью проверки модели, но с проверкой формы он должен работать, как в моем отредактированном примере. Вы можете зарегистрировать свою собственную форму, которая будет использоваться администратором. –