如何使用子弹字段获取内容类型模型名称

时间:2019-11-07 08:38:03

标签: django django-models django-contenttypes

我想从内容类型中获取型号名称。

我已经尝试过了....

a = Module.objects.filter(slug =“ sales”)

因此它返回SoftDeletionQueryset

所以在那之后,我做了以下

对于x中的a:print(x.content_type)

因此它返回“销售分析”。那就是Module.content_type字段中的content_type值

我现在有content_type值.....具有3个字段的内容类型模型对吗? app_label,model,name所以我想根据content_type值获取模型名称–

这是我的代码

class Module(BaseModel, SoftDeletionModel):
    id = models.AutoField(primary_key=True)
    name = models.CharField(
        _("Module Name"), max_length=50, default=False, unique=True)
    slug = models.SlugField(unique=True)
    display_name = models.CharField(
        _("Display Name"), max_length=50, default=False)
    content_type = models.ForeignKey(ContentType,
                                     blank=True, null=True, on_delete=models.CASCADE)
    parent_module_id = models.ForeignKey("Module",
                                         blank=True, null=True, on_delete=models.CASCADE)
    order = models.IntegerField(_("Order"), default=0, blank=True, null=True)

    class Meta:
        db_table = 'modules'

    def __str__(self):
        return "{0}".format(self.display_name)

1 个答案:

答案 0 :(得分:0)

我不太了解这个问题,但我会尽力回答

您使用import matplotlib.pyplot as plt def map_col(col): if col == 'y_odd': mapped_col = 0 elif col == 'y_even': mapped_col = 1 return mapped_col x = [1, 4, 2, 7, 4, 9] y = [4, 1, 3, 6, 8, 2] c = ['y_even', 'y_odd', 'y_odd', 'y_even', 'y_even', 'y_even'] color = [map_col(col) for col in c] plt.scatter(x, y, s=100, c=color, cmap="gnuplot") plt.show() ,它将返回print()函数的结果。

如果要获取型号名称,则必须使用此代码或content_type

__str__

如果您的意思是确切的类名, 为此,请使用modules = Module.objects.filter(slug="sales") for m in modules: print(m.name) print(m.content_type) .__class__.__name__