Python 将QuerySet返回为JSON。使用values()函数会导致缺少值

Python 将QuerySet返回为JSON。使用values()函数会导致缺少值,python,json,django,django-models,Python,Json,Django,Django Models,我想从如下所示的模型中获取数据。类ModelItem应返回return语句中的所有4个值 class ModelItem(models.Model): """Stores item names for user""" item_owner = models.ForeignKey(User, null=True, on_delete=models.CASCADE) item_name = models.TextField(max_length=100, null=True)

我想从如下所示的模型中获取数据。类ModelItem应返回return语句中的所有4个值

class ModelItem(models.Model):
    """Stores item names for user"""
    item_owner = models.ForeignKey(User, null=True, on_delete=models.CASCADE)
    item_name = models.TextField(max_length=100, null=True)

    def __unicode__(self):
        return "{0}, {1}, {2}, {3}".format(
                                        self.pk,
                                        self.item_owner.pk,
                                        self.item_owner.username,
                                        self.item_name,
                                      )
在views.py中,下面的代码有效。我得到了类“ModelItem”返回的所有值

user_id = 2
get_data = ModelItem.objects.filter(item_owner=user_id)
context = {'user_items': get_data}
return render(request, 'itemrequests.html', context)
结果(项目主键、项目所有者主键、项目所有者用户名、项目名称):

结果(缺少用户名):

我不知道是什么原因造成的。这是我从模型返回数据的方式还是其他方式

已解决

好的,为了从模型返回自定义数据,我通过将此类添加到models.py,从使用Djangos默认用户模型切换到自定义用户模型:

class SiteUser(AbstractUser):

    def natural_key(self):
        return (self.username, self.pk)
为了让django开始使用我的新自定义用户模型,我还在settings.py中添加了以下内容:

AUTH_USER_MODEL = 'homepage.SiteUser'
这样,我仍然使用默认的用户模型作为基础,只是添加了一些东西。在这个类中,我添加了natural_key()-方法,它返回用户的用户名和主键

在将外键指向用户的其他型号中,我做了以下更改:

models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.CASCADE)
在my views.py中,我使用了以下内容:

user_id = 1
get_data = ModelItem.objects.select_related('item_owner').filter(item_owner=user_id)
ser_data = serializers.serialize("json", get_data, use_natural_foreign_keys=True)
return HttpResponse(ser_data, content_type="application/json")
结果:

[{"model": "homepage.modelitem", "pk": 1, "fields": {"item_owner": ["Murzum", 1], "item_name": "2h-Axe"}}, {"model": "homepage.modelitem", "pk": 2, "fields": {"item_owner": ["Murzum", 1], "item_name": "Ball Of fire"}}]
现在我有了物品所有者的用户名和pk值。
另外,现在学习的方法
\uuuuUnicode\uuuuuu
\uuuuuu str\uuuuu
仅用于打印对象时的表示,这并不意味着如果返回实例将以这种方式工作。您必须返回数据所需的信息

编辑:也可以使用方法来避免额外的查询

ModelItem.objects.select_related('item_owner').filter(item_owner=user_id)
user_id = 1
get_data = ModelItem.objects.select_related('item_owner').filter(item_owner=user_id)
ser_data = serializers.serialize("json", get_data, use_natural_foreign_keys=True)
return HttpResponse(ser_data, content_type="application/json")
[{"model": "homepage.modelitem", "pk": 1, "fields": {"item_owner": ["Murzum", 1], "item_name": "2h-Axe"}}, {"model": "homepage.modelitem", "pk": 2, "fields": {"item_owner": ["Murzum", 1], "item_name": "Ball Of fire"}}]
ModelItem.objects.select_related('item_owner').filter(item_owner=user_id)