用对象数组替换包含整数数组的字典值

时间:2018-06-25 17:23:49

标签: django python-3.x object

我目前正在使用django,并且能够获取我模型的JSON,但是JSON的键之一包含一个数字数组,我需要用这些数字的对象数组代替。查询以获取Contexts模型的json

queryset = serializers.serialize("json", Contexts.objects.all())

这就是我得到的

[{"model": "app.contexts", "pk": 1, "fields": {"context_name": "tech-experts", "context_description": "this is for tech experts", "context_priority": "H", "users": [1, 3, 4]}}, {"model": "app.contexts", "pk": 2, "fields": {"context_name": "video-conf-issue", "context_description": "bla bla", "context_priority": "H", "users": [4, 5]}}, {"model": "app.contexts", "pk": 3, "fields": {"context_name": "video-conf-issue", "context_description": "bla bla", "context_priority": "L", "users": [3]}}, {"model": "app.contexts", "pk": 15, "fields": {"context_name": "Network debug", "context_description": "Group for debugging network issues", "context_priority": "L", "users": [2]}}]

现在我仅对fields值感兴趣。所以我这样做

result = [i.get('fields') for i in ast.literal_eval(queryset)]

现在我明白了

[{'context_priority': 'H', 'context_name': 'tech-experts', 'context_description': 'this is for tech experts', 'users': [1, 3, 4]}, {'context_priority': 'H', 'context_name': 'video-conf-issue', 'context_description': 'bla bla', 'users': [4, 5]}, {'context_priority': 'L', 'context_name': 'video-conf-issue', 'context_description': 'bla bla', 'users': [3]}, {'context_priority': 'L', 'context_name': 'Network debug', 'context_description': 'Group for debugging network issues', 'users': [2]}]

现在您可以看到users有一个包含整数的数组。基本上,这些整数是用户ID,我想要这些ID的用户对象。

所以我的User 1的userId模型对象将是

User.objects.filter(userId=1)

因此,为了实现这一点,我执行以下操作

[i.update({"users":[].append(User.objects.filter(userId=j))}) for i in result for j in i.get("users")]

但是现在我得到键users的结果值为None

[{'context_description': 'this is for tech experts', 'users': None, 'context_priority': 'H', 'context_name': 'tech-experts'}, {'context_description': 'bla bla', 'users': None, 'context_priority': 'H', 'context_name': 'video-conf-issue'}, {'context_description': 'bla bla', 'users': None, 'context_priority': 'L', 'context_name': 'video-conf-issue'}, {'context_description': 'Group for debugging network issues', 'users': None, 'context_priority': 'L', 'context_name': 'Network debug'}]

我该如何实现?

在下面添加了ContextsUser模型

class User(models.Model):
    userId = models.PositiveIntegerField(null = False)
    pic = models.ImageField(upload_to=getUserImagePath,null=True)
    Email = models.EmailField(null = True)


class Contexts(models.Model):
    context_name = models.CharField(max_length=50)
    context_description = models.TextField()
    context_priority = models.CharField(max_length=1)
    users = models.ManyToManyField(User, related_name='context_users')

1 个答案:

答案 0 :(得分:0)

更改

[i.update({"users":[].append(User.objects.filter(userId=j))}) for i in result for j in i.get("users")]

[i.update({"users":[].append(User.objects.filter(pk=j))}) for i in result for j in i.get("users")]