我有以下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并迭代它的最佳方法是什么。
答案 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
]
}
我首先考察一下这个实现,然后看看你可以从中重用它。