Ссылка на ManyToManyField в методе __str__ модели django - PullRequest
0 голосов
/ 11 июня 2019

В методе str модели Django я пытаюсь сослаться на поле, являющееся ManyToManyField.

class Level(models.Model):
    code            = models.CharField(max_length=10)
    name            = models.CharField(max_length=60)

    def __str__(self):
        return self.code

class Excercise(models.Model):
    title           = models.CharField(max_length=100, unique=True)
    level           = models.ManyToManyField(Level)

    def __str__(self):
        return self.level.code + ') ' + self.title[:20]

Последняя строка кода

return self.level.code + ')' + self.title [: 20]

Выдает ошибку: объект 'ManyRelatedManager' не имеет атрибута 'code'.Я использую Python 3.6 и Django 2.2.2

1 Ответ

1 голос
/ 11 июня 2019

Вы можете сделать это так:

class Excercise(models.Model):
    title           = models.CharField(max_length=100, unique=True)
    level           = models.ManyToManyField(Level)

    def __str__(self):
        return '({}) {}'.format(', '.join(self.level.all().values_list('code', flat=True)), self.title[:20])

Потому что вы можете получить доступ к объектам уровня, используя .all().

Или, если вы хотите получить доступ только к первому объекту, используйтекак это:

    def __str__(self):
        elevel = self.level.all().first()
        if elevel:
           return elevel.code + ')' + self.title[:20]
        return self.title[:20]

Для получения дополнительной информации об использовании ManyToMany, пожалуйста, проверьте documentation.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...