如何从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': [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"}]
我很努力,为什么我的规则列表是空在那里。
答
我不认为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
愚蠢的问题 - 但你肯定有你的数据库的规则?如果你可以手动检查,并确保'rule_ids'有一个有效的范围,这将是很好的信息发布。 – user 2014-11-25 17:25:21