api 调用中不包含 Django manytomany 字段
Django manytomany fields are not included in api call
型号:
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 模型中读取,关联的灯光也不会显示。
编辑:
当尝试这样的事情时:
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() returns 包含模型所有匹配对象的查询集。
您想做的是:
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-framework 和 ModelViewSets,它们让您可以使用 API 做更多事情。
型号:
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 模型中读取,关联的灯光也不会显示。
编辑:
当尝试这样的事情时:
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() returns 包含模型所有匹配对象的查询集。
您想做的是:
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-framework 和 ModelViewSets,它们让您可以使用 API 做更多事情。