2016-05-11 4 views
0

レコードを更新したいが、フィールドは文字列で決定されます。それは可能ですか?Djangoクエリの更新 - フィールドは文字列によって決定されます

これは私のモデルである:

class Wallet(models.Model): 
    user_id = models.IntegerField(blank=True, null=True) 
    wallet1 = models.DecimalField(max_digits=15, decimal_places=2, blank=True, null=True) 
    wallet2 = models.DecimalField(max_digits=15, decimal_places=2, blank=True, null=True) 

これは私のコードです:

obj.wallet1 = obj.wallet1 - amount 

しかし、それはない:私はこれを書いたときに

amount = 200 
transfer_from = 'wallet1' 
transfer_to = 'wallet2' 

obj = Wallet.objects.get(user_id=1) 
obj.transfer_from = obj.transfer_from - amount 
obj.transfer_to = obj.transfer_to + amount 
obj.save() 

Djangoはフィールドのみを認識これを認識:

transfer_from = 'wallet1' 
obj.transfer_from = obj.transfer_from - amount 

「ウォレット」オブジェクトに「transfer_from」という属性はありません。ありがとうございました。

+0

まず、wallet1はWalletクラスのフィールドで、 'wallet1'は文字列です。 Djangoは文字列 'wallet1'によって実際にWalletのwallet1を参照していることを、Djangoがどのように理解すると思いますか。加えて、あなたがオブジェクトを取得することは明らかに属性エラーがありません。また、何が問題なのかobj.wallet1 = obj.wallet1 - 量 –

+0

setattrとgetattrを使うべきです。 setattr(obj、field_obj、value) – durdenk

+0

@RajeshYogeshwar私はフロントエンドからrequest.data ['transfer_from']で 'wallet1'を取得するため、これを行います。そこで私はフロントエンドからのデータを変数に入れました。 – Krisnadi

答えて

1

これはテストされていませんが、動作するはずです。

amount = 200 
transfer_from = 'wallet1' 
transfer_to = 'wallet2' 


obj = Wallet.objects.get(user_id=1) 
transfer_from_field_val = getattr(obj,transfer_from) 
transfer_to_field_val = getattr(obj,transfer_to) 
transfer_from_field_val = transfer_from_field_val - amount 
transfer_to_field_val = transfer_to_field_val + amount 

setattr(obj , transfer_from, transfer_from_field_val) 
setattr(obj , transfer_to, transfer_to_field_val) 
obj.save() 
+0

getattrは動作していますが、残念ながらsetattrは機能しません。あなたは何が問題なのか知っていますか? – Krisnadi

+0

私の悪いです。これは動作します。ありがとうございました。 – Krisnadi

1

実際これはPythonの質問です。 これを参照してください:What is getattr() exactly and how do I use it?

getattrを使用して、ここにあなたが何ができるかです:

transfer_from_label = 'wallet1' 
transfer_from = getattr(obj, transfer_from_label) 
transfer_from = transfer_from - amount 
0
setattr(obj, transfer_form, getattr(obj, transfer_form) - amount) 

getattrsetattr

関連する問題