diff --git a/tests/_utils/setup.sql b/tests/_utils/setup.sql index 8298a5b8a728..2d9f50a0bfbb 100644 --- a/tests/_utils/setup.sql +++ b/tests/_utils/setup.sql @@ -600,3 +600,13 @@ CREATE TABLE `delete_player_game` ( KEY (`player_id`), KEY(`game_id`) ); + +-- db_functions +CREATE TABLE `db_functions_article_author` ( + `article_id` BIGINT NOT NULL, + `author_id` BIGINT NOT NULL, + SHARD KEY (`article_id`), + UNIQUE KEY (`article_id`, `author_id`), + KEY (`article_id`), + KEY (`author_id`) +); diff --git a/tests/db_functions/migrations/0002_create_test_models.py b/tests/db_functions/migrations/0002_create_test_models.py index 37ee93f92f6e..4934ccb6e211 100644 --- a/tests/db_functions/migrations/0002_create_test_models.py +++ b/tests/db_functions/migrations/0002_create_test_models.py @@ -19,12 +19,6 @@ class Migration(migrations.Migration): migrations.CreateModel( name="Article", fields=[ - ( - "authors", - models.ManyToManyField( - "db_functions.Author", related_name="articles" - ), - ), ("title", models.CharField(max_length=50)), ("summary", models.CharField(max_length=200, null=True, blank=True)), ("text", models.TextField()), @@ -34,6 +28,37 @@ class Migration(migrations.Migration): ("views", models.PositiveIntegerField(default=0)), ], ), + migrations.CreateModel( + name="ArticleAuthor", + fields=[ + ( + "article", + models.ForeignKey( + on_delete=models.CASCADE, to="db_functions.article" + ), + ), + ( + "author", + models.ForeignKey( + on_delete=models.CASCADE, to="db_functions.author" + ), + ), + ], + options={ + "managed": False, + "db_table": "db_functions_article_author", + "unique_together": {("article", "author")}, + }, + ), + migrations.AddField( + model_name="article", + name="authors", + field=models.ManyToManyField( + related_name="articles", + through="db_functions.ArticleAuthor", + to="db_functions.author", + ), + ), migrations.CreateModel( name="Fan", fields=[ diff --git a/tests/db_functions/models.py b/tests/db_functions/models.py index d6a06511bcc1..7b4336d0aacb 100644 --- a/tests/db_functions/models.py +++ b/tests/db_functions/models.py @@ -12,7 +12,7 @@ class Author(models.Model): class Article(models.Model): - authors = models.ManyToManyField(Author, related_name="articles") + authors = models.ManyToManyField("Author", related_name="articles", through="ArticleAuthor") title = models.CharField(max_length=50) summary = models.CharField(max_length=200, null=True, blank=True) text = models.TextField() @@ -22,6 +22,15 @@ class Article(models.Model): views = models.PositiveIntegerField(default=0) +class ArticleAuthor(models.Model): + article = models.ForeignKey(Article, on_delete=models.CASCADE) + author = models.ForeignKey(Author, on_delete=models.CASCADE) + + class Meta: + unique_together = (('article', 'author'),) + db_table = "db_functions_article_author" + + class Fan(models.Model): name = models.CharField(max_length=50) age = models.PositiveSmallIntegerField(default=30)