如何设置Django模型表,使其无法更改?

2024-09-30 16:24:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习Django,有可能有一个简单的答案,我找不到,因为我不知道该找什么。你知道吗

我有一个名为NFLteam的类/表,一旦为NFL中的每个团队填充了一个条目,它就永远不会改变。我做了一个DB表,这样我就可以在另一个表中有一个外键,指向一个特定的NFL球队。现在球队只有一个领域,一个名字。但是在未来他们会有更多。你知道吗

models.py

class NFLteam( models.Model ):
    team_name  = models.CharField( max_length=3, choices=NFL_TEAMS )

    def __unicode__( self ):
        return self.team_name

下面是上面提到的NFL_TEAMS序列:

NFL_TEAMS = (
    ( 'ARI', 'Arizona Cardinals' ),
    ( 'ATL', 'Atlanta Falcons' ),
    ( 'BAL', 'Baltimore Ravens' ),
    ( 'BUF', 'Buffalo Bills' ),
    ( 'CAR', 'Carolina Panthers' ),
    ( 'CHI', 'Chicago Bears' ),
    ( 'CIN', 'Cincinnati Bengals' ),
    ( 'CLE', 'Cleveland Browns' ),
    ( 'DAL', 'Dallas Cowboys' ),
    ( 'DEN', 'Denver Broncos' ),
    ( 'DET', 'Detroit Lions' ),
    ( 'GB' , 'Green Bay Packers' ),
    ( 'HOU', 'Houston Texans' ),
    ( 'IND', 'Indianapolis Colts' ),
    ( 'JAX', 'Jacksonville Jaguars' ),
    ( 'KC' , 'Kansas City Chiefs' ),
    ( 'MIA', 'Miami Dolphins' ),
    ( 'MIN', 'Minnesota Vikings' ),
    ( 'NE' , 'New England Patriots' ),
    ( 'NO' , 'New Orleans Saints' ),
    ( 'NYG', 'New York Giants' ),
    ( 'NYJ', 'New York Jets' ),
    ( 'OAK', 'Oakland Raiders' ),
    ( 'PHI', 'Philadelphia Eagles' ),
    ( 'PIT', 'Pittsburgh Steelers' ),
    ( 'SD' , 'San Diego Chargers' ),
    ( 'SEA', 'Seattle Seahawks' ),
    ( 'SF' , 'San Francisco 49ers' ),
    ( 'STL', 'Saint Louis Rams' ),
    ( 'TB' , 'Tampa Bay Buccaneers' ),
    ( 'TEN', 'Tennessee Titans' ),
    ( 'WAS', 'Washington Redskins' ),
)

既然NFLteam表永远不应该改变(或者非常,非常罕见),有没有一种方法可以使它最终确定或不可变,这样模型就会拒绝接受对它的更新?理想情况下,我希望它与数据库无关,以便它与SQLite、MySql等(如Django模型定义)的工作方式相同。你知道吗


Tags: django答案name模型selfnewmodelsteam
2条回答

我会这样做:

class NonUpdateAbleModelMixin():
    def save(self, *args, **kwargs):
        pass


class NFLteam(models.Model, NonUpdateAbleModelMixin):
    team_name  = models.CharField( max_length=3, choices=NFL_TEAMS )

    def __unicode__( self ):
        return self.team_name

save中,您可以使用设置中的一些标志或任何您想要的标志

您可以在设置中的某个地方添加一个标志,然后重写该类的save函数,并在该标志打开时返回。你知道吗

from django.conf import settings
...
class NFLTeam(models.Model):
...
    def save(self, *args, **kwargs):
        if settings.NFL_NO_SAVE is True:
             return

相关问题 更多 >