Python 如何在Django中引用一组模型字段?

Python 如何在Django中引用一组模型字段?,python,django,django-models,django-forms,Python,Django,Django Models,Django Forms,假设我有以下Django模型: class Person(models.Model): name = models.CharField() age = models.IntegerField() country = models.ForeignKey(Country) company = models.ForeignKey(Company) 我的应用程序可以根据某些条件搜索用户,然后返回一个包含结果的表,只显示用户请求的特定列 现在我想在数据库中存储搜索以及显示

假设我有以下Django模型:

class Person(models.Model):
    name = models.CharField()
    age = models.IntegerField()
    country = models.ForeignKey(Country)
    company = models.ForeignKey(Company)
我的应用程序可以根据某些条件搜索用户,然后返回一个包含结果的表,只显示用户请求的特定列

现在我想在数据库中存储搜索以及显示的列

class SavedSearch(models.Model):
    title = models.CharField()
    q_object = models.BinaryField()
    display_fields = ???
存储将显示人物模型中的哪些字段的最佳方式是什么

目前我只是将字段名的JSON列表(例如,
['name','age']
)存储在TextField中,但我想知道是否有更好的方法来存储对模型字段的引用


我还希望能够存储相关(通过ForeignKey)模型的字段。因此,类似于
['name'、'age'、'company\uu website']

这样的东西恐怕您无法保存对模型字段的引用,但您可以使用一个计算属性来保存模型名称并根据需要返回字段引用-

  • 将模型名称与字段一起保存

    class SavedSearch(models.Model):
        title = models.CharField()
        q_object = models.BinaryField()
        model_name = models.CharField() # 'app_label.Person'
        display_fields = models.CharField() # 'name,age,company__website' -> comma separated vaulues
    
  • 然后添加计算属性-

        @property
        def display_fields_property(self):    
            from django.apps import apps
            properties = [] 
            # get the model class using apps from django.apps
            model = apps.get_model(app_label=self.model_name.split('.')[0], model_name=self.model_name.split('.')[1]) 
            for x in self.display_fields.split(','):
                # get the property from the model class
                properties.append(getattr(model, x)
            # properties contains field reference of the model fields
            return properties 
    

您如何返回结果?