2016-03-13 2 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 ] 

Но это не работает, как поле не может быть решен в поле QuerySet.

Я посмотрел 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

Я не понимаю, что вы пытаетесь сделать. Не могли бы вы объяснить это словами? Что такое 'before' и' after' должно быть? Я отредактировал свой ответ, но я не уверен, что это то, чего вы пытаетесь достичь. –

+0

Спасибо Антуан! Было много своевременной помощи – EarlyCoder

Смежные вопросы