2014-11-25 45 views
0

我有以下django模型。代表django中的多對多模型爲json

class Rule(models.Model): 
    name = models.CharField(max_length=50) 
    user = models.ForeignKey(User, related_name='rules', null=True, blank=True) 
    threshold = models.CharField(max_length=50, null=True, blank=True) 
    alert_value = models.CharField(max_length=50, null=True, blank=True) 
    is_internal = models.BooleanField(default=False) 

    def __unicode__(self): 
     return self.name 

    def to_json(self): 
     return { 
      'name': self.name, 
      'threshold': self.threshold, 
      'alert_value': self.alert_value 
     } 

class Module(models.Model): 
    name = models.CharField(max_length=50) 
    description = models.TextField(null=True, blank=True) 
    is_internal = models.BooleanField(default=False) 
    rules = models.ManyToManyField(Rule) 

    def to_json(self): 
     return { 
      'name': self.name, 
      'description': self.description, 
      'rules': self.rules 
     } 

    def __unicode__(self): 
     return self.name 

現在我該如何編寫模塊中的to_json方法來接受許多規則。

我目前做的

response = [module.to_json() for module in modules if module.name is not None]

,它拋出一個錯誤說服力。

<django.db.models.fields.related.ManyRelatedManager object at 0x10811c390> is not JSON serializable

什麼是表示,作爲一個JSON和迭代過來的最好辦法。

+0

我認爲你不需要M2M那裏,ForeignKey應該足夠了。 – 2014-11-25 10:28:31

回答

1
'rules': [r.to_json() for r in self.rules.all()] 
+0

當我得到規則時,它會打印一個空列表 – station 2014-11-25 13:14:35

+0

在shell中檢查同一個對象時,是否會得到一個空列表? – 2014-11-25 14:42:55

0

dumpdata管理命令執行它與固定裝置的方式是轉儲PK值的陣列,用於在多對多字段的對象。這些實例本身分別被丟棄。

例如:

{ 
    "pk": 365, 
    "model": "tree.tree", 
    "fields": { 
     "label": "Root", 
     "subtrees": [ 
      367, 
      368 
     ] 
} 

我通過觀察,落實啓動,看看有什麼,如果有的話,你可以從它重用。