我目前正在使用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'}]
我该如何实现?
在下面添加了Contexts
和User
模型
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')
答案 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")]