django - 获取名称为动态的字段

时间:2011-08-08 10:35:10

标签: python django

我需要什么: 我想从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 - 怎么做?

3 个答案:

答案 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的更多信息。