2016-03-13 58 views
2

我願做這樣的事情:的Django如何動態查找字段

before = [ rec.field for rec in all_relevant_records ] 

# Do some operation on the all_relevant_records: 
for rec in all_relevant_records: 
    rec_pk = rec.pk 
    new_field = get_new_field(rec, field) 
    db.objects.filter(pk=rec_pk).update(field=new_field) 

after = [ rec.field for rec in all_relevant_records ] 

但是,這並不爲野外工作不能被解析爲一個查詢集場。

我看過How to dynamically provide lookup field name in Django query?但是,這不是我想要的。

任何幫助表示讚賞

回答

1

當你這樣做:

db.objects.filter(pk=rec_pk).update(field=new_field) 

您使用的關鍵字參數。這相當於:

db.objects.filter(**{'pk': rec_pk}).update(**{'field': new_field}) 

所以如果field是不是你的字段的名稱,但包含的字段名稱的變量,你想要做的是:

db.objects.filter(pk=rec_pk).update(**{field: new_field}) 

關於本:

before = [ rec.field for rec in all_relevant_records ] 

我不知道你想達到什麼樣的,但我想它應該是這樣的:

before = [getattr(rec, field) for rec in all_relevant_records] 
+0

很好解釋!你的回答確實解決了我遇到的兩個問題之一。第二個問題是如何在列表解析前後動態獲取字段。你有沒有想法? – EarlyCoder

+0

我不明白你在做什麼。你能用文字解釋嗎?應該是什麼?之前和之後?我編輯了我的答案,但我不確定那是你想要達到的目標。 –

+0

謝謝Antoine!這是很多及時的幫助 – EarlyCoder