django - 获取动态名称字段

8 投票
3 回答
11368 浏览
提问于 2025-04-16 23:07

我需要做的事情是:我想从数据库中获取对象的详细信息。我使用的是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)

撰写回答