代表许多模型在django中作为json

时间:2014-11-25 10:23:43

标签: python json django

我有以下django模型。

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并迭代它的最佳方法是什么。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

dumpdata管理命令使用fixture的方式是在ManyToMany字段中转储对象的PK值数组。实例本身是单独转储的。

例如:

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

我首先考察一下这个实现,然后看看你可以从中重用它。