将Django模型类名称添加到字段中

use*_*850 2 django django-models

我尝试了多种方法,但由于我不能在课堂上使用自我,自我.__class__.__name__不可用.我是否需要覆盖save方法才能执行此操作?谢谢你的帮助.

Cra*_*der 5

你的问题很奇怪,所以我会侧身来.

假设您已Foo按如下方式定义了模型:

from django.db import models

class Foo( models.Model ):

    foo = models.IntegerField()
    bar = models.IntegerField()

    def klass( self ):
        return self.__class__.__name__
Run Code Online (Sandbox Code Playgroud)

假设您启动Django shell(python manage.py shell),您可以执行以下操作:

>>> from foo.models import Foo
>>> foo = Foo()
>>> print foo.klass()
Foo
Run Code Online (Sandbox Code Playgroud)

这表明你当然可以self.__class__.__name__在任何方法体中使用模型Foo.因此,您必须具有其他上下文,您需要动态确定模型的实际类名,而不是模型实例.

如果您已完成模型的定义,则以下内容是合法的:

>>> print Foo._meta.object_name
Foo
Run Code Online (Sandbox Code Playgroud)

此机制允许您直接对模型进行内省,而无需创建模型的实例.

如果这对您不起作用,则必须在模型的实际定义期间使用此功能.在这种情况下,我谨慎地建议,如果您知道自己正在定义Foo模型,那么您应该只Foo在需要的地方进行硬编码.如果您在模型创建过程中确实需要一种动态方式来确定模型的名称...您能描述一下您尝试解决的实际问题,以便我们可以帮您解决吗?