【问题标题】:how to create a model for following requirements如何为以下需求创建模型
【发布时间】:2021-05-18 16:27:06
【问题描述】:

我有个人资料模型,它有多个领域,如传球、接球、射门。然后每个字段都有 4 个部分,例如(右、左、上、下)。如何为每个字段存储 4 个不同的值。

【问题讨论】:

    标签: python django django-models django-views wagtail


    【解决方案1】:

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

    PersonSkillLevel:

    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
    

    【讨论】:

      【解决方案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)
      

      【讨论】:

      • 它就像一个表格,由用户填写的表格
      • 它像表格一样,为了传递,他们为 L、R、T、B 填写了 4 个值,然后再次为接收的下一个字段填写了 L、R、T、B 的 4 个值。
      • 您提供的信息很少。您想为每个字段存储 4 个不同的值,这是不可能的。一个字段只能有一个值。您需要为四个值定义 4 个字段,即总共 12 个字段以满足您的要求。
      • 我有 10 个字段,所以我想在我的模型中创建 40 个字段?
      • 您提到'每个字段都有 4 个部分,例如(右、左、上、下)。为每个字段存储 4 个不同的值。但是您不能在一个字段中包含 4 个部分的值。这违反了数据库规则。因为根据您的要求,每个部分都将被视为一个单独的字段。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      • 2014-06-25
      • 1970-01-01
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多