私は大規模な Django アプリケーションを継承しており、「shows」アプリケーションのモデルでこのイディオムを備えています。
class Movie_Playlist(models.Model):
name = models.CharField(max_length=150)
# More fields here...
players = models.ManyToManyField(
User, related_name='playlists_played', null=True, blank=True)
class PlaylistPlayer(models.Model):
user = models.ForeignKey(User, related_name='play_links')
movie_playlist = models.ForeignKey(Movie_Playlist, related_name='playlist_plays')
count = models.IntegerField(default=0)
last_played = models.DateTimeField(editable=False)
class Meta:
db_table = 'shows_movie_playlist_players'
私が知る限りでは、shows_movie_playlist_players テーブル (ManyToManyField リレーションによって作成される) は、リレーション自体に加えてユーザーごとの情報を格納するという 2 つの役割を果たしていると思われます。確かに、元のデータベースには「shows_movie_playlist」と「shows_movie_playlist_players」という 2 つの関連するテーブルしかないようです。
また、価値のあることとして、これはDjango 1.2.3 - 1.3.1で問題なく「検証」されます。
これは、テスト データベースを作成しようとするときに「python manage.py test」メソッドを壊すことを除いて、すべて問題なくダンディーです。 PlaylistPlayer クラスに。
"ManyToManyField..." 行をコメントアウトすると、テスト データベースを作成して問題なくテストを実行できます。それ以外の場合は、次のようになります。
> python manage test shows -v3
Creating test database for alias 'default' ('test_production')...
Creating tables ...
Creating table shows_movie_playlist_players
Creating table shows_movie_playlist
Creating table shows_movie_playlist_players
Traceback (most recent call last):
File "manage.py", line 16, in <module>
execute_manager(settings)
... Lots of tracebackage here...
_mysql_exceptions.OperationalError: (1050, "Table 'shows_movie_playlist_players' already exists")
これは適切に指定されたリレーションとオーバーライドされたテーブルで、まだテストをサポートしていないのでしょうか、それとも何かひどく間違っているのでしょうか?
読んでくれてありがとう!