2013-01-21 17 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自動處理這個問題,我會很高興聽到它。

相關問題