2013-01-21 16 views
0

我正在创建一个记录玩家统计信息的模型。
通过首先手动输入数据点,我可以让Django使用​​将具有自然键的数据序列化为json文件。 我的计划是将此序列化格式复制到批量插入其他数据点;问题是Django不会使用loaddata将json反序列化回数据库。抛出的错误是包含另一个自然键的自然键的Django反序列化

DeserializationError: int() argument must be a string or a number, not 'list'

我已经简化了抱怨JSON数据一点,但它看起来像这样:
{"pk": 1, "model": "nba.metric", "fields": {"player": ["Kobe Bryant", ["Lakers", 2012]]}}

我的模型,像这样:

class TeamManager(models.Manager): 
    def get_by_natural_key(self, name, season): 
     return self.get(name=name, season=season) 
class Team(models.Model): 
    name = models.CharField(max_length=20) 
    season = models.IntegerField() 
    class Meta: 
     unique_together = ('name', 'season') 
    objects = TeamManager() 
    def natural_key(self): 
     return (self.name, self.season) 

class PlayerManager(models.Manager): 
    def get_by_natural_key(self, name, team): 
     return self.get(name=name, team=team) 
class Player(models.Model): 
    name = models.CharField(max_length=100) 
    team = models.ForeignKey(Team) 
    class Meta: 
     unique_together = ('name', 'team') 
    objects = PlayerManager() 
    def natural_key(self): 
     return (self.name, self.team.natural_key()) 

class Metric(models.Model): 
    player = models.ForeignKey(Player) 
    # ... 

任何输入非常感谢,谢谢!

回答

1

我有完全相同(棘手)的问题,并设法解决这个问题。您需要更改get_by_natural_key方法,以便它接受在Player.natural_key()内使用的team.natural_key()隐含给出的2个参数。试试这个:

class PlayerManager(models.Manager): 
    def get_by_natural_key(self, name, team_name, team_season): 
     return self.get(name=name, team__name=team_name, team__season=team_season) 

如果你发现另一个解决方案,Django自动处理这个问题,我会很高兴听到它。

相关问题