我需要什么: 我想从DB获取对象详细信息。我使用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 - 怎么做?
答案 0 :(得分:20)
你知道,我一开始认为这是你的答案 - 它允许你通过动态属性进行搜索:**
运算符可以工作吗?
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)
答案 1 :(得分:1)
如果您只想要字段值,请避免构建模型实例并获取值的整个过程,只需直接从数据库中查询:
field_value = model.objects.values_list(field_name, flat=True).get(pk__exact=id)
答案 2 :(得分:0)
getattr(old_image, field_name)
怎么样?有关documentation的更多信息。