Skip to main content
 首页 » 编程设计

python之在模型 save() 中如何获取以 'foo' 开头的所有字段

2025年05月04日18xxx_UU

我有这个 django 模型:

from django.db import models 
 
class MyModel(models.Model): 
    foo_it = model.CharField(max_length=100) 
    foo_en = model.CharField(max_length=100) 
 
    def save(self): 
        print_all_field_starting_with('foo_') 
        super(MyModel, self).save() 

所以我想获取所有以 foo 开头的字段(作为示例)并以此做一些事情。 我不能在代码中这样做,因为我不知道模型中的所有字段(我使用的是 django-transmeta)

那么,我该怎么做呢?

提前致谢;)

请您参考如下方法:

get_all_field_names() 方法内置于所有模型的 Meta 子类中,可以在 foo._meta.get_all_field_names() 中找到:

>>> from foo.models import Foo 
>>> f = Foo.objects.get(pk=1) 
>>> f._meta.get_all_field_names() 
['active', 'created', 'expires', 'id', , 'inputter', 'reason', 'requester', 'updated'] 

所以这将是一件简单的事情:

def print_all_fields_starting_with(obj, starter): 
    fields = [x for x in obj._meta.get_all_field_names() if x.startswith(starter)] 
    for field in fields: 
        print getattr(obj, field) 

在您的自定义 save() 中:

def save(self): 
    print_all_fields_starting_with(self, "foo_") 
    super(MyModel, self).save()