Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否可以合并具有多个关系的django模型类?_Python_Sql_Django_Django Models - Fatal编程技术网

Python 是否可以合并具有多个关系的django模型类?

Python 是否可以合并具有多个关系的django模型类?,python,sql,django,django-models,Python,Sql,Django,Django Models,我继承了一个大型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,

我继承了一个大型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\u movie\u playlist\u players表(由ManyToManyField关系创建)除了存储关系本身之外,还存储每个用户的信息,从而起到双重作用。当然,在原始数据库中似乎只有两个相关的表:“shows\u movie\u playlist”和“shows\u movie\u playlist\u player”

另外,不管它值多少钱,它“验证”了Django 1.2.3--1.3.1中的罚款

这一切都很好,但它在尝试创建测试数据库时破坏了“python manage.py test”方法,因为“ManyToManyField…”规范在到达playlayplayer类时已经创建了shows\u movie\u playlist\u播放器

如果我注释掉“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")
>python管理测试演示-v3
正在为别名“default”(“test_production”)创建测试数据库。。。
正在创建表。。。
创建表格显示\u电影\u播放列表\u播放器
创建表格显示电影播放列表
创建表格显示\u电影\u播放列表\u播放器
回溯(最近一次呼叫最后一次):
文件“manage.py”,第16行,在
执行\u管理器(设置)
... 这里有很多回溯。。。
_mysql\u exceptions.OperationalError:(1050,“表'显示电影\u播放列表\u播放器'已存在”)
那么,这是一个正确指定的关系和被重写的表,它还不支持测试,还是有什么可怕的错误

谢谢你的阅读

噢,哇。。。我同情你:)是的,这是非常错误的,但它可能有一个简单的解决办法。 基本上,这是一种试图实现
ManyToManyField

尝试在players`m2m字段中通过class='shows.playlayplayer'指定
,然后查看其行为。

噢,哇。。。我同情你:)是的,这是非常错误的,但它可能有一个简单的解决办法。 基本上,这是一种试图实现
ManyToManyField


尝试在
players`m2m字段中通过class='shows.playlayplayer'指定
,然后查看其行为。

OK!我这样做了,我可以运行测试。。。你认为我应该用db_表规范去掉playlplayer的元类吗?谢谢我认为您可能应该这样做,但请注意,这会将结果数据库表名
playliplayer
更改为
shows\u playliplayer
。因此,如果您有一个现有的DB(比如在生产中),则需要进行模式迁移,以便从
shows\u movie\u playlist\u players
重命名该表。如果你还不想处理这个问题,那么让它保持原样并不是什么大问题。我想目前,我想在允许我对它进行测试的同时,做尽可能少的更改。非常感谢你闪电般的回答!好啊我这样做了,我可以运行测试。。。你认为我应该用db_表规范去掉playlplayer的元类吗?谢谢我认为您可能应该这样做,但请注意,这会将结果数据库表名
playliplayer
更改为
shows\u playliplayer
。因此,如果您有一个现有的DB(比如在生产中),则需要进行模式迁移,以便从
shows\u movie\u playlist\u players
重命名该表。如果你还不想处理这个问题,那么让它保持原样并不是什么大问题。我想目前,我想在允许我对它进行测试的同时,做尽可能少的更改。非常感谢你闪电般的回答!