【问题标题】:Django natural keys, combination of two values?Django自然键,两个值的组合?
【发布时间】:2013-09-21 03:22:57
【问题描述】:

我想为一个模型创建一个自然键,它是两个值的组合。

我尝试了以下方法:

class TeamManager(models.Manager):
    def get_by_natural_key(self, name):
        return self.get(name=name)

class Team(models.Model):
    objects = TeamManager()
    name = models.CharField(max_length=100, unique=True)

    def natural_key(self):
        return name

class SeasonManager(models.Manager):
    def get_by_natural_key(self, team, year):
        return self.get(team=team.natural_key(), year=year)

class Season(models.Model):
    objects = SeasonManager()
    year = models.CharField(max_length=25, choices=YEARS)
    team = models.ForeignKey(Team)

    def natural_key(self):
        return "%s-%s"%(self.team.natural_key(),self.year)

    natural_key.dependencies = ['league.Team']

当我尝试通过其自然键“Atlanta Falcons”、“2013-1014”访问赛季模型时,出现以下异常:

ValueError: invalid literal for int() with base 10: 'Atlanta Falcons'

【问题讨论】:

    标签: python django django-models key


    【解决方案1】:

    不是将你的 2 个值作为自然键返回字符串,而是返回这些值的元组

    def natural_key(self):
        return (self.team.natural_key(),self.year)
    

    【讨论】:

      【解决方案2】:

      以下修复适用于我:

      class SeasonManager(models.Manager):
          def get_by_natural_key(self, team, year):
              return self.get(team=Team.objects.get_by_natural_key(team), year=year)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-03
        • 1970-01-01
        • 1970-01-01
        • 2018-06-17
        • 1970-01-01
        • 2022-12-08
        • 2017-10-26
        • 1970-01-01
        相关资源
        最近更新 更多