2017-03-16 13 views
0

以下のモデルからデータを取得したいとします。 ModelItemクラスは、return文の4つの値すべてを返す必要があります。 works.I以下views.pyコードで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, 
            ) 

クラスの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}]} 

私はこれを引き起こしているものを見つけることができません。それはモデルや他の何かからデータを返す方法ですか?

class SiteUser(AbstractUser): 

    def natural_key(self): 
     return (self.username, self.pk) 
を:モデルからカスタマイズされたデータを返すために、私はmodels.pyのためにこのクラスを追加することにより、カスタムのユーザーモデルにDjangosデフォルトのユーザー・モデルを使用してから切り替えるので

[OK]を解決しよう私の新しいカスタムユーザーモデルを使用して起動するためのDjangoのために

私もsettings.pyに次のようにコメントを追加しました:私は

AUTH_USER_MODEL = 'homepage.SiteUser' 

この道をデフォルトのUser-modelをベースとして使用しています。このクラスでは、ユーザのユーザ名と主キーを返すnatural_key()メソッドを追加しました。私は次の使用私のviews.pyで

models.ForeignKey(settings.AUTH_USER_MODEL, null=True, on_delete=models.CASCADE) 

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"}}] 
私は、ユーザーへの外部キーを指して、他のモデルで

はI以下の変更を行いました

ここで、item_ownerのユーザー名とパスワードの両方を取得しました。 はまた、あなたがオブジェクトを印刷する場合についてdjango Manager interface

答えて

1

方法__unicode__または__str__は表現のためだけでは今学んで、それはあなたがインスタンスを返した場合、そのように動作することを意味しません。あなたは必要な情報をserializingのデータに戻す必要があります。

EDIT:余分なクエリを避けるためにselect_relatedメソッドを使用することもできます。

ModelItem.objects.select_related('item_owner').filter(item_owner=user_id) 
関連する問題