Как получить название модели типа контента с помощью поля slug - PullRequest
1 голос
/ 07 ноября 2019

Я хотел бы получить название модели из типа контента.

Я пробовал это ....

a = Module.objects.filter (slug = "sales")

Итак, он возвращает SoftDeletionQueryset

Так что после этого я просто сделал следующее

для x в a: print (x.content_type)

Итак, он вернул«Аналитика продаж». То есть значение content_type в поле Module.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 голосов
/ 07 ноября 2019

Я не совсем понимаю вопрос, но постараюсь ответить

Вы используете print(), и он возвращает __str__ func результат.

Если вы хотите получить название модели, вы должны использовать этот код или content_type

modules = Module.objects.filter(slug="sales")
for m in modules:
   print(m.name)
   print(m.content_type)

Если вы имеете в виду именно имя класса
Для этого используйте .__class__.__name__ или Module.__name__

...