函数可以引用被调用的类吗?
问题描述:
我有Django的定义如这些某些型号:函数可以引用被调用的类吗?
class Post(models.Model):
text = models.CharField(max_length=50)
class Thread(models.Model):
title = models.CharField(max_length=50)
,我想有一个,叫里面要么这些类的外部函数,做了有关在它被调用的类。
例如,ListAll()
函数,调用它里面Post()
,列出了所有Post
对象,而是叫里面Thread
,列出了所有Thread
对象。
我该怎么做?我见过使用__this__
的回复,但显然引用了特定的类实例,这让我有点困惑。
谢谢。
答
这是一个mixin的工作,可以添加到任何类。
class ListAll:
def list_all(self):
return self.__class__.objects.all()
它添加到类:
class Post(ListAll, models.Model):
...
并使用它:
my_post_obj.list_all()
我希望这是一个例子,虽然,因为这将是更好的选择只是传递模型将自己分类到任何想要列出对象的地方。
答
您可以使用函数模型内部以及那些可以用类调用对象
class Thread(models.Model):
title = models.CharField(max_length=50)
def listAll(self):
return self.objects.all() # a function that would return all objects
按照意见,如果你有使用的许多型号单一功能的要求,那么你可以通过动态加载模型的名称。我不会说它的推荐或任何东西,但它完美的作品。
import importlib
model_module = importlib.import_module('app_name.models.models')
# remember this example refers to loading a module not its class so if you
# have a file models.py containing all the models then this should be perfect
model_object = model_module.model_name # now you have loaded the model
data = model_object.objects.all() # apply whatever you want now
但是这并不意味着在每个模型上都有完全相同的功能吗?这就是我想要避免的重复。 – Man
如果是这样,那么你必须编写一个采用模型名称的函数,将其导入并应用过滤器或查询。这将包括动态加载模型 –
那么这就是问题的关键,我不知道该怎么做。我感谢您的帮助。 – Man