我繼承了一個大的Django應用程序,它都具備這個成語的型號爲「顯示」應用程序:是否有可能將django模型類與ManyToMany關係合併?
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關係創建)應該通過除了關係本身之外存儲每個用戶的信息來完成雙重任務。當然,原始數據庫中似乎只有兩個相關的表:「shows_movie_playlist」和「shows_movie_playlist_players」。
此外,它的價值在於,Django 1.2.3 - 1.3.1中的「驗證」正確。
這都將是罰款和花花公子,但它打破了由當它試圖自shows_movie_playlist_players已經由創建創建測試數據庫中的「蟒蛇manage.py測試」方法「ManyToManyField ......」規範它到達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")
所以這是一個正確指定關係,覆蓋表,只是沒有對測試的支持又或者是可怕的錯誤?
感謝您的閱讀!
好的!我這樣做了,我可以運行測試...你認爲我應該用db_table規範擺脫PlaylistPlayer的Meta類嗎? 謝謝! – oofoe 2012-04-10 21:32:27
我想你可能應該這樣做,但要注意這會將'PlaylistPlayer'的結果數據庫表名稱更改爲'shows_playlistplayer'。所以如果你有一個現有的數據庫(比如在製作中),你需要一個模式遷移來重新命名table_movie_playlist_players中的表。儘管如此,如果你不想處理這個問題,這並不是一個大問題。 – 2012-04-10 21:54:18
我認爲此刻,我想盡可能地做出少許改變,同時仍然允許我在測試中得到它。非常感謝您的閃電回答! – oofoe 2012-04-10 22:12:57