写一个体育联盟计划“Django方式”

时间:2016-11-20 11:36:30

标签: python django

我正在编写Django的大型体育联盟。我有各自的体育,团队,学校和日程表。 Schedule模型包括Home和Away Scores。这是一个基于结果的应用程序,而不是一个计划安排的应用程序。

我的问题是录制结果“Django Way”。我可以创建一个可以节省输赢的结果模型,但这就像存储不必要的数据一样,如果两个用户为同一个游戏提交不同的分数,则可能会出现问题。另一种方法是使用查询并在每次调用时计算赢/输。

我正在接受挑战,但我担心自己会开始走向死胡同。以下是我的模型,如果有帮助的话:

from django.db import models
from django.contrib import admin

class Sports(models.Model):
    sport = models.AutoField(primary_key=True)
    sport_name = models.CharField(max_length=225, blank=True, null=True)

    class Meta:
        managed = True
        db_table = 'sports'
    def __str__(self):
        return self.sport_name


class School(models.Model):
    school = models.AutoField(primary_key=True)
    school_name = models.CharField(max_length=225, blank=True, null=True)

    class Meta:
        managed = True
        db_table= 'school'
    def __str__(self):
        return self.school_name

class SchoolAdmin(admin.ModelAdmin):
    fields = ('school_id', 'school_name')

class Teams(models.Model):
    team = models.AutoField(primary_key=True)
    team_name = models.CharField(max_length=225, blank=True, null=True)
    sport_id = models.ForeignKey(Sports, models.DO_NOTHING, blank=True, null=True)
    division = models.CharField(max_length=225, blank=True, null=True)
    school = models.ForeignKey(School, models.DO_NOTHING, blank=True, null=True)

    class Meta:
        managed = True
        db_table = 'teams'
    def __str__(self):
        return self.team_name

class Schedule(models.Model):
    match = models.AutoField(primary_key=True)
    match_date = models.DateField(blank=True, null=True)
    home = models.ForeignKey(Teams, related_name='home_set',  blank=True, null=True)
    away = models.ForeignKey(Teams, related_name='away_set', blank=True, null=True)
    home_score = models.IntegerField(blank=True, null=True)
    away_score = models.IntegerField(blank=True, null=True)
    class Meta:
        managed = True
        db_table = 'schedule'
    def __str__(self):
        return '%s at %s' % (self.away, self.home)

class ScheduleAdmin(admin.ModelAdmin):
    model = Schedule
    list_display = ('match_date', 'home', 'away', 'home_score', 'away_score')

1 个答案:

答案 0 :(得分:0)

根据需要创建尽可能多的模型。如果您只需要目标/分数/分数,则可以将其保存到游戏模型的某个字段中。如果您需要有关这些目标/分数的其他数据,请为这些创建单独的模型。确实没有正确或错误的答案 - 你只需要考虑你需要什么。并且还要弄清楚将来可能需要什么以及如何保存所有数据。根据您的需求创建模型,而不是其他人的意见。

我前段时间为冰球编写了一个应用程序,我们有很多不同的模型,因为我们需要有关所有这些的数据。我的应用程序的主要模型是赛季,裁判,游戏,GamePlayer,玩家,GameReferee,目标,惩罚,GamePunishment和GoalKeeper,但再次 - 如果你不需要所有这些信息,你不需要那么多的模型