2014-11-25 70 views
0

我有以下两种模式。如何从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': [r.to_json() for r in self.rules.all()] 
     } 

    def __unicode__(self): 
     return self.name 

现在我有一个方法来保存模块在我的views.py。

def create_module(request): 
    if request.method == 'POST': 
     module_name = request.POST.get('name') 
     module_description = request.POST.get('description') 
     rule_ids = request.POST.getlist('rule_id') 
     module = models.Module(name=module_name, 
          description=module_description) 
     module.save() 
     rules = models.Rule.objects.filter(pk__in=rule_ids) 
     module.rules = rules 
     return HttpResponse(status=200) 

和方法来检索模块

def get_module(request): 
    if request.method == 'GET': 
     module_ids = request.GET.getlist('module_id') 
     modules = models.Module.objects.filter(pk__in=module_ids) 
     response = [module.to_json() for module in modules if module.name is not 
       None] 
     return HttpResponse(json.dumps(response), 
            content_type='application/json') 

然而,当我试图找回我得到一个空的规则列表。我打印规则对象,同时保存它打印,所以我确实保存它。但是,使用打印回get_module

[{"rules": [], "name": "module_name", "description": "first description"}]

我很努力,为什么我的规则列表是空在那里。

+0

愚蠢的问题 - 但你肯定有你的数据库的规则?如果你可以手动检查,并确保'rule_ids'有一个有效的范围,这将是很好的信息发布。 – user 2014-11-25 17:25:21

回答

0

我不认为rules保存:

试试这个办法在你create_module()功能:

#... 
rules = models.Rule.objects.filter(pk__in=rule_ids) 
for rule in rules: 
    module.rules.add(rule) 
# instead of: module.rules = rules 
+0

不是。这并不能解决问题。 – station 2014-11-25 13:31:24

+0

你的规则显然不被保存。我编辑了我的答案。尝试以这种方式添加m2m关系 – doniyor 2014-11-25 13:34:04

+0

我试过这样做的更早。仍然不起作用:( – station 2014-11-25 13:36:10

相关问题