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 做更多事情。