我有以下两种型号。
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 :(得分: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