django - 获取动态名称字段
我需要做的事情是:我想从数据库中获取对象的详细信息。我使用的是get()这个函数。现在我遇到的问题是,我把这个操作放在了一个函数里,而其中一个参数是字段名,以字符串的形式传入:
def delete_file_if_changed(id, change, form, model, field_name='image'):
if change:
if field_name in form.changed_data:
old_image = model.objects.get(pk__exact=id)
那么,我该怎么做才能获取到old_image.field_name呢?该怎么实现呢?
3 个回答
1
如果你只想要某个字段的值,那就不用费劲去创建模型实例再获取值,直接从数据库里查询就行了:
field_value = model.objects.values_list(field_name, flat=True).get(pk__exact=id)
3
那getattr(old_image, field_name)
呢?想了解更多,可以查看这个文档。
28
你知道吗,我一开始以为这是你的答案——它让你可以通过动态属性来搜索:**
这个操作符能用吗?
kw = {field_name:change} # you're not explicit as to which is the field_name
# value you would like to search for.
old_image = model.objects.get(**kw)
不过,如果你已经有了想要的对象,只是需要获取一个动态命名的属性的值,那么你可以使用getattr(object, name[, default])
:
getattr(old_image, "id", "Spam") # gets old_image.id, if that does not exist, it
# defaults to the str "Spam" Of course, in this
# context, you probably want
# getattr(old_image, field_name)