我想從下面顯示的模型中獲取數據。類ModelItem應該返回return語句中的所有4個值。將QuerySet返回爲JSON。使用values()函數導致缺失值
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下面works.I的代碼獲得所有的值該類的ModelItem'將返回
user_id = 2
get_data = ModelItem.objects.filter(item_owner=user_id)
context = {'user_items': get_data}
return render(request, 'itemrequests.html', context)
結果項的這個(PK,item_owner的PK,item_owner的用戶名, ITEM_NAME):
<QuerySet [<ModelItem: 1, 2, app_user, 2h-Axe>, <ModelItem: 2, 2, app_user, Ball of fire>]>
但是,如果試圖在JSON返回數據(並因此不必使用.values())
user_id = 2
get_data = ModelItem.objects.filter(item_owner=user_id).values()
return JsonResponse({'results': list(get_data)})
結果(用戶名丟失):
{"results": [{"item_name": "2h-Axe", "item_owner_id": 2, "id": 1}, {"item_name": "Ball of fire", "item_owner_id": 2, "id": 2}]}
我無法找出是什麼原因造成這一點。這是我從模型或其他東西返回數據的方式嗎?
解決
確定,所以爲了從模型返回定製數據我使用Django的默認用戶模式,自定義用戶模式切換加入這個類的models.py:
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)
在我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"}}]
現在我有item_owner的用戶名和pk值。 現在還能學到django Manager interface