2014-11-25 8 views
0

다음 장고 모델이 있습니다.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로 충분하다고 생각합니다. –

답변

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

규칙을 받으면 빈 목록을 인쇄합니다. – station

+0

셸에서 같은 개체를 검사 할 때 빈 목록을 가져 옵니까? –

0

dumpdata 관리 명령 비품을 수행하는 방식은 ManyToMany 필드 오브젝트에 대한 PK 값의 어레이를 덤프한다. 인스턴스 자체는 별도로 덤프됩니다. 예를 들어

: 그 구현에보고 시작하고 어떤 경우에, 당신은 그것에서 재사용 할 수있는, 볼 것

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

.

관련 문제