如何为以下需求创建模型

2024-06-16 14:20:21 发布

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

我有一个侧面模型,它有多个领域,如传球,接球,投篮。然后每个字段有4个部分,如(右、左、上、下)。如何为每个字段存储4个不同的值


Tags: 模型领域投篮传球接球
2条回答

对于您的需求,您可以使用带有不同值的CharField作为选项

例:

class Profile(models.Model):
    MY_CHOICES = (
        ('R', 'Right'),
        ('L', 'Left'),
        ('T', 'Top'),
        ('B', 'Bottom')
    )
    passing = models.CharField(max_length=1, choices=MY_CHOICES, default='R', blank=True)
    receiving = models.CharField(max_length=1, choices=MY_CHOICES, default='R', blank=True)
    shooting = models.CharField(max_length=1, choices=MY_CHOICES, default='R', blank=True)

听起来你所描述的实际上是几个相关的模型。在没有这些数据所代表的全部细节的情况下,我不得不猜测这些模型最合适的名称——但假设“传递”、“接收”等都是技能,而你正在衡量人们在这些类别中的技能水平。然后,技能列表将属于“技能”模型-即,如果您有10种不同的技能,那么这将是一个包含10个条目的表,每个条目对应一种技能。然后,每当您存储一个人的结果时,您都会将其存储为一组链接记录:个人模型中的一个条目,以及涵盖所有技能所需的尽可能多的PersonSkillLevel记录。您的模型将如下所示:

class Skill(models.Model):
    name = models.CharField(max_length=255)


class Person(models.Model):
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)


class PersonSkillLevel(models.Model):
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    skill = models.ForeignKey(Skill, on_delete=models.CASCADE)
    right = models.IntegerField()
    left = models.IntegerField()
    top = models.IntegerField()
    bottom = models.IntegerField()

其中存储的数据类似于:

技能:

id | name
       -
 1 | Passing
 2 | Receiving
 3 | Shooting

人:

id | first_name | last_name
             -
 1 | Bobson     | Dugnutt
 2 | Todd       | Bonzalez

人员技能水平:

id | person | skill | right | left | top | bottom
 1 |      1 |     1 |    12 |   23 |  24 |     31  <- Bobson Dugnutt's scores for Passing
 2 |      1 |     2 |    13 |   15 |  21 |     17  <- Bobson Dugnutt's scores for Receiving
 3 |      2 |     1 |    25 |   14 |  20 |     12  <- Todd Bonzalez's scores for Passing
 4 |      2 |     2 |    16 |   22 |  15 |     24  <- Todd Bonzalez's scores for Receiving

相关问题 更多 >