2013-09-21 3 views
1

Je voudrais faire une clé naturelle pour un modèle qui est la combinaison de deux valeurs.Touches naturelles Django, combinaison de deux valeurs?

J'ai essayé les suivantes:

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'] 

Lorsque je tente d'accéder au modèle de la saison par ses clés naturelles "Atlanta Falcons", "2013-1014" Je reçois cette exception:

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

Répondre

1

Au lieu de retourner la chaîne de valeurs que vous 2 comme retour clé naturelle Tupple de ceux que

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

merci, c'est une approche plus sensible – mconlin

0

Le fo Laisser réparer fixe fonctionne pour moi:

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) 
Questions connexes