Python 如何在Django中引用一组模型字段?
假设我有以下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) 我的应用程序可以根据某些条件搜索用户,然后返回一个包含结果的表,只显示用户请求的特定列 现在我想在数据库中存储搜索以及显示
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