Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь добавить один и тот же (Flask SQLAlchemy) объект в отношение, я почти уверен, что он просто пропускает дубликат.
Мой вариант использования является то, что Code
может иметь двойные цветные объекты в нем. Это прекрасно работает с базой данных, как вы можете видеть здесь:
+----+----------+---------+
| id | color_id | code_id |
+----+----------+---------+
| 17 | 5 | 5 |
+----+----------+---------+
| 18 | 4 | 5 |
+----+----------+---------+
| 19 | 5 | 5 |
+----+----------+---------+
| 20 | 6 | 5 |
+----+----------+---------+
color_id
5 присутствует дважды для одного и того же кода.
Но, как я упоминал ранее, он не работает как гладко со связями.
Отношения внутри моего Code
класса выглядят так:
_colors = db.relationship('Color', secondary=colors, lazy='subquery', backref=db.backref('code_colors', lazy=True))
Это прекрасно работает, за исключением случаев, когда я пытаюсь добавить один и тот же объект дважды, как это:
random_code.colors.append(color_list[i])
Добавляет все цвета, кроме дополнительного двойного цвета. С помощью отладчика это становится очень понятным.
Ниже вы можете видеть, что в списке правильно содержатся все цветовые объекты, которые я хочу добавить, включая один и тот же объект дважды.
Но это то, что он на самом деле добавляет ПОСЛЕ db.session.commit()
Я искал inte rnet, но не нашел результатов, когда они добавляются к отношениям. Как я могу это исправить, чтобы он добавлял все цветные объекты вместо того, чтобы отфильтровывать дубликаты?