Экземпляр модели Django с переменной

#django #django-models #django-queryset

#django #django-модели #django-набор запросов

Вопрос:

Это единственный способ получить нужное мне значение:

  User1.types1.r_q2.label
  

Я хочу сделать его динамичным, заменив field name и textChoices переменной. Как я могу это сделать?

Models.py:

 class User1(models.Model):

    class r_q1(models.TextChoices):
        r_q2 = 'r_q2', 'second question'
        r_q3 = 'r_q3', 'third question'
        t_greeting = 't_greeting', 't_greeting'
        f_passport = 'f_passport', 'Contact with a human f_passport'


    r_q1 = models.CharField (
        'How can I help you, today?1',
        max_length=200,
        choices=r_q1.choices, blank=True, null=False
    )
  

Это работает, но когда я заменяю только fieldname :

 User1.types1[x].label
  

Когда я делаю это для textChoices имени, это не работает и вызывает ошибку:

 User1[y][x].label
  

ошибка:

 Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: 'ModelBase' object is not subscriptable
  

Примечание: У меня есть много текстовых вариантов в моем models.py . Я не включил их, поскольку они здесь не важны.

Ответ №1:

Я заставляю его работать, используя getattr() .

 getattr(User1, 'types1')['r_q2'].label
  

При использовании переменных:

 y='types1'
x='r_q2'

getattr(User1, y)[x].label
  

Никаких проблем не будет.

Комментарии:

1. Спасибо, что вернулись и ответили, как только нашли решение.