型号:
class Light(models.Model):
name = models.CharField(max_length=255, default="neues Licht", null=False, blank=False)
percentage = models.IntegerField(default=0, null=False, blank=False)
def __str__(self):
return self.name
class LightGroup(models.Model):
name = models.CharField(max_length=255, default="neue Gruppe", null=False, blank=False)
lights = models.ManyToManyField(Light,related_name='groups')
def __str__(self):
return self.name
视图:
def get(self, request, *args, **kwargs):
lights = Light.objects.all().values()
lights_list = list(lights)
return JsonResponse(lights_list, safe=False)
结果:
[{"id": 2, "name": "light 1", "percentage": 3}]
如何在jsonresponse中包含组?
在管理面板中查看组时,连接确实会显示出来。但是,即使我尝试从LightGroup模型中读取,关联的Lights也不会显示。
编辑:
当尝试这样的东西时:
def get(self, request, *args, **kwargs):
obj = Light.objects.all()
lights = obj.groups.all().values()
lights_list = list(lights)
return JsonResponse(lights_list, safe=False)
我得到:AttributeError-"QuerySet"对象没有属性"groups">
编辑2:解决方案:
我使用Manjit Kumars的答案进入小组,并能够以我想要的形式获得数据:
def get(self, request, *args, **kwargs):
lights_list =[]
lights = Light.objects.all().values()
lights_obj = Light.objects.all()
for light_obj, light in zip(lights_obj, lights):
light_groups = light_obj.groups.all().values()
light["groups"] = list(light_groups)
lights_list.append(light)
return JsonResponse(lights_list, safe=False)
json
Model.objects.all((返回一个查询集,该查询集包含模型的所有匹配对象。
你想做的是:
def get(self, request, *args, **kwargs):
lights_list = []
lights = Light.objects.all()
for light in lights:
light_groups = light.groups.all().values()
lights_list = list(light_groups)
return JsonResponse(lights_list, safe=False)
或者,您可以查看django-rest框架和ModelViewSets,它们为您的API提供了更多的功能。