Как добавить тот же объект к отношениям в (Flask) SQLAlchemy? - PullRequest
1 голос
/ 04 апреля 2020

Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь добавить один и тот же (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])

Добавляет все цвета, кроме дополнительного двойного цвета. С помощью отладчика это становится очень понятным.

Ниже вы можете видеть, что в списке правильно содержатся все цветовые объекты, которые я хочу добавить, включая один и тот же объект дважды.

What's actually inside the list

Но это то, что он на самом деле добавляет ПОСЛЕ db.session.commit()

What's actually inside the code.colors

Я искал inte rnet, но не нашел результатов, когда они добавляются к отношениям. Как я могу это исправить, чтобы он добавлял все цветные объекты вместо того, чтобы отфильтровывать дубликаты?

...