Skip to content

Commit 2e1e6f9

Browse files
adds m2m column to the playground (#1234)
* adds m2m column to the playground * adds @dantownsend sugestions * add a reason --------- Co-authored-by: Daniel Townsend <[email protected]>
1 parent 90e2eeb commit 2e1e6f9

File tree

2 files changed

+61
-47
lines changed

2 files changed

+61
-47
lines changed

piccolo/apps/playground/commands/run.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,15 @@
1212

1313
from piccolo.columns import (
1414
JSON,
15+
M2M,
1516
UUID,
1617
Array,
1718
Boolean,
1819
Date,
1920
ForeignKey,
2021
Integer,
2122
Interval,
23+
LazyTableReference,
2224
Numeric,
2325
Serial,
2426
Text,
@@ -49,6 +51,7 @@ class Band(Table):
4951
name = Varchar(length=50)
5052
manager = ForeignKey(references=Manager, null=True)
5153
popularity = Integer()
54+
genres = M2M(LazyTableReference("GenreToBand", module_path=__name__))
5255

5356
@classmethod
5457
def get_readable(cls) -> Readable:
@@ -161,6 +164,26 @@ def get_readable(cls) -> Readable:
161164
)
162165

163166

167+
class Genre(Table):
168+
id: Serial
169+
name = Varchar()
170+
bands = M2M(LazyTableReference("GenreToBand", module_path=__name__))
171+
172+
@classmethod
173+
def get_readable(cls) -> Readable:
174+
return Readable(
175+
template="%s",
176+
columns=[cls.name],
177+
)
178+
179+
180+
class GenreToBand(Table):
181+
id: Serial
182+
band = ForeignKey(Band)
183+
genre = ForeignKey(Genre)
184+
reason = Text(null=True, default=None)
185+
186+
164187
TABLES = (
165188
Manager,
166189
Band,
@@ -171,6 +194,8 @@ def get_readable(cls) -> Readable:
171194
DiscountCode,
172195
RecordingStudio,
173196
Album,
197+
Genre,
198+
GenreToBand,
174199
)
175200

176201

@@ -282,6 +307,24 @@ def populate():
282307
),
283308
).run_sync()
284309

310+
genres = Genre.insert(
311+
Genre(name="Rock"),
312+
Genre(name="Classical"),
313+
Genre(name="Folk"),
314+
).run_sync()
315+
316+
GenreToBand.insert(
317+
GenreToBand(
318+
band=pythonistas.id,
319+
genre=genres[0]["id"],
320+
reason="Because they rock.",
321+
),
322+
GenreToBand(band=pythonistas.id, genre=genres[2]["id"]),
323+
GenreToBand(band=rustaceans.id, genre=genres[2]["id"]),
324+
GenreToBand(band=c_sharps.id, genre=genres[0]["id"]),
325+
GenreToBand(band=c_sharps.id, genre=genres[1]["id"]),
326+
).run_sync()
327+
285328

286329
def run(
287330
engine: str = "sqlite",

tests/columns/m2m/base.py

Lines changed: 18 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from piccolo.engine.finder import engine_finder
1212
from piccolo.schema import SchemaManager
1313
from piccolo.table import Table, create_db_tables_sync, drop_db_tables_sync
14-
from tests.base import engine_is, engines_skip
14+
from tests.base import engines_skip
1515

1616
engine = engine_finder()
1717

@@ -51,54 +51,25 @@ def _setUp(self, schema: Optional[str] = None):
5151

5252
create_db_tables_sync(*self.all_tables, if_not_exists=True)
5353

54-
if engine_is("cockroach"):
55-
bands = (
56-
Band.insert(
57-
Band(name="Pythonistas"),
58-
Band(name="Rustaceans"),
59-
Band(name="C-Sharps"),
60-
)
61-
.returning(Band.id)
62-
.run_sync()
63-
)
64-
65-
genres = (
66-
Genre.insert(
67-
Genre(name="Rock"),
68-
Genre(name="Folk"),
69-
Genre(name="Classical"),
70-
)
71-
.returning(Genre.id)
72-
.run_sync()
73-
)
74-
75-
GenreToBand.insert(
76-
GenreToBand(band=bands[0]["id"], genre=genres[0]["id"]),
77-
GenreToBand(band=bands[0]["id"], genre=genres[1]["id"]),
78-
GenreToBand(band=bands[1]["id"], genre=genres[1]["id"]),
79-
GenreToBand(band=bands[2]["id"], genre=genres[0]["id"]),
80-
GenreToBand(band=bands[2]["id"], genre=genres[2]["id"]),
81-
).run_sync()
82-
else:
83-
Band.insert(
84-
Band(name="Pythonistas"),
85-
Band(name="Rustaceans"),
86-
Band(name="C-Sharps"),
87-
).run_sync()
54+
bands = Band.insert(
55+
Band(name="Pythonistas"),
56+
Band(name="Rustaceans"),
57+
Band(name="C-Sharps"),
58+
).run_sync()
8859

89-
Genre.insert(
90-
Genre(name="Rock"),
91-
Genre(name="Folk"),
92-
Genre(name="Classical"),
93-
).run_sync()
60+
genres = Genre.insert(
61+
Genre(name="Rock"),
62+
Genre(name="Folk"),
63+
Genre(name="Classical"),
64+
).run_sync()
9465

95-
GenreToBand.insert(
96-
GenreToBand(band=1, genre=1),
97-
GenreToBand(band=1, genre=2),
98-
GenreToBand(band=2, genre=2),
99-
GenreToBand(band=3, genre=1),
100-
GenreToBand(band=3, genre=3),
101-
).run_sync()
66+
GenreToBand.insert(
67+
GenreToBand(band=bands[0]["id"], genre=genres[0]["id"]),
68+
GenreToBand(band=bands[0]["id"], genre=genres[1]["id"]),
69+
GenreToBand(band=bands[1]["id"], genre=genres[1]["id"]),
70+
GenreToBand(band=bands[2]["id"], genre=genres[0]["id"]),
71+
GenreToBand(band=bands[2]["id"], genre=genres[2]["id"]),
72+
).run_sync()
10273

10374
def tearDown(self):
10475
drop_db_tables_sync(*self.all_tables)

0 commit comments

Comments
 (0)