【问题标题】:Django, Archery SystemDjango,射箭系统
【发布时间】:2021-01-13 11:14:22
【问题描述】:

这更像是请求指导,而不是任何硬编码示例。 我给自己设置了一个使用 Django 编写射箭记录系统的问题。 我的记录系统运行良好,系统可以注册用户,记录他们的分数,显示他们的分数过滤回合,显示用户在特定回合中的得分等。 我遇到的这个问题是在对分数进行分类时。 我会解释:

  • 在射箭比赛中,分数会根据您射击的回合记录。它们各不相同,因此您有 60 多轮可供选择,每轮都有不同的标准和不同的最高分数。
  • 弓箭手按性别和年龄分组(10 个子组)
  • 弓箭手射击 3 种不同弓型中的一种
  • 分类系统的工作原理是获取圆形射击和弓箭手所属的子组以及使用的弓型并查看值表。获得的分类是分数所属的分类,即
  • 如果您是 18 岁以上的男性,您将被归类为“绅士”
  • 您射出的那一局称为“约克”,带有反曲弓,您的得分为 550
  • 您要查阅的表格如下所示
圆形 |三等 |二等 |一等 |鲍曼 |鲍曼大师 |鲍曼大师
York     283      511      698       913       1065            1146

在这种情况下,返回的分类将是 2nd Class。 桌子很安静,因为初级女士可以打同一轮,但他们需要的分数会有所不同才能达到类似的分类。

我的问题是这种查找可以在 django 中完成吗?

我有一个 Scores 表,其中收集了回合的名称和该回合的最高分数以及弓箭手射击的组。我创建了一个索引来唯一标识这些变量,因为只能有一个分类准备拍摄约克的绅士。我要做的是查找适当的分类表并返回分类值并将其存储在回合得分记录中。

这是我的分数模型: 类分数(models.Model):

BOW_TYPE = (
    ('R', 'Recurve',),
    ('C', 'Compound',),
    ('L', 'Longbow',),
)
archer = models.ForeignKey('User', related_name='scores', on_delete=models.CASCADE)
rndname = models.ForeignKey('Round', related_name='round', verbose_name=("Round Name"), on_delete=models.CASCADE)
shootingas = models.ForeignKey('Age', related_name='shootingas', verbose_name='Shooting as', on_delete=models.CASCADE)
bowtype = models.CharField(max_length=1, verbose_name=("Bow Type"), choices=BOW_TYPE)
score = models.IntegerField(default='')
dateshot = models.DateField(verbose_name="Date Round Shot", default=timezone.now)
created_date = models.DateTimeField(default=timezone.now)
classindex = models.CharField(max_length =5, default='')

def index(self):
    return str(self.shootingas_id) + str(self.rndname_id) + str(self.bowtype)
index = property(index)

def save(self, *args, **kwargs):
   self.classindex = self.index  
   super(Score, self).save(*args, **kwargs)  

def __str__(self):
    return str(self.archer) + ' | ' + str(self.score) + ' | ' + str(self.rndname) + ' | ' + str(self.created_date) + ' | ' + str(self.classindex)

分类表如下所示:

class Classification(models.Model):
shootingas = models.ForeignKey('Age', related_name='shooting', on_delete=models.CASCADE)
roundname = models.ForeignKey('Round', related_name='rounds', on_delete=models.CASCADE)
bowtype = models.ForeignKey("BowType", verbose_name='bows', default=1, on_delete=models.CASCADE)
third = models.IntegerField(default='', verbose_name="3rd Class Bowman", null=True, blank=True)
second = models.IntegerField(default='', verbose_name="2nd Class Bowman",  null=True, blank=True)
first = models.IntegerField(default='', verbose_name="1st Class Bowman",  null=True, blank=True)
BM = models.IntegerField(default='', verbose_name="Bowman",  null=True, blank=True)
MB = models.IntegerField(default='', verbose_name="Master Bowman",  null=True, blank=True)
GMB = models.IntegerField(default='', verbose_name="Grand Master Bowman",  null=True, blank=True)
classindex = models.CharField(max_length=5)

def index(self):
    return str(self.shootingas_id) + str(self.roundname_id) + str(self.bowtype.id)
index = property(index) 

def save(self, *args, **kwargs):
   self.classindex = self.index  
   super(Classification, self).save(*args, **kwargs)   

def __str__(self):
    return str(self.index)

我需要一种在两个表中使用 classindex 作为链接的方法,以便可以将分数与分类表中的值进行比较,并且可以将相应的分类值(第 3、第 2 等)返回到分数表中

我意识到这有点令人费解,但我真的很想要一些关于我可以从哪里开始寻找解决方法的指针。

如果您需要任何其他信息,请告诉我。

谢谢

【问题讨论】:

    标签: django database sqlite django-models calculation


    【解决方案1】:

    这在 Django 中是可能的。似乎您正在寻求一种存储这些独特计分表以比较弓箭手得分的好方法。否则,如果有足够的逻辑,你当然可以将一个弓箭手和一个分数归类到某个类别。

    Django 模型是 SQL 字段的表示。这是存储评分表的好方法,但是在存储数据时您有很多选择。

    【讨论】:

    • 谢谢你。我已经有一个分类表,它是链接在一起然后找到值。我有一个 classindex 字段,由两个表中的 Shootingas.id(即 Gentleman 等)、roundname.id、回合的 id 即 York = 1 等)和 bowtype.id,(recurve = 1)组成,以链接它们在一起,这是困扰我的许多可能组合的方法,应该在哪里进行计算?我认为模型,但不确定如何。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    相关资源
    最近更新 更多