我使用Django 2.1。
我有一个通用实用工具/功能(使用芹菜),可以从Model(是抽象模型,由其他Model继承)的save
方法调用。
由于该函数中的数据将被序列化,因此将模型名称和PK传递给它。
class A(models.Model)
def save(self, *args, **kwargs):
send_async(model_name=type(self).__name__, pk=self.id))
class B(A)
class C(A)
稍后,我想查询模型,但是我不知道如何获取模型:
我尝试过:
model = apps.get_model('django_app_name.{}'.format(model_name))
我收到以下错误:
No installed app with label 'django_app_name'.
也:
model = ContentType.objects.get(model=model_name)
这不会引发错误,但是非常奇怪的行为会使用不同的参数“调用”视图,并且当然不会有结果。
答案 0 :(得分:0)
使用具有模型的应用名称,而不要使用django_app_name
。
答案 1 :(得分:0)
要获取型号名称,请尝试以下操作:
send_async(model_name=self.__class__.__name__, pk=self.id)
instance.__class__.__name__
将返回类名称
答案 2 :(得分:0)
您应该这样做:
class A(models.Model)
def save(self, *args, **kwargs):
send_async(
model_name=self._meta.model_name,
app_label=self._meta.app_label,
pk=self.id
)
在send_async中:
def send_async(model_name, app_label, pk):
content_type = ContentType.objects.get(app_label=app_label, model=model_name)
instance = content_type.get_object_for_this_type(id=pk)
...
有关它的更多信息,请参见https://docs.djangoproject.com/en/2.1/ref/contrib/contenttypes/