यह एकमात्र तरीका है जिससे मुझे वह मूल्य मिल सकता है जिसकी मुझे आवश्यकता है:

 User1.types1.r_q2.label

मैं चर के साथ field name और textChoices को बदलकर इसे गतिशील बनाना चाहता हूं। मैं इसे कैसे कर सकता हूं?

Model.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

सिडेनोट: मेरे model.py में कई टेक्स्ट चॉइस हैं। मैंने उन्हें शामिल नहीं किया क्योंकि वे यहां महत्वपूर्ण नहीं हैं।

-1
Ulvi 27 सितंबर 2020, 19:36

1 उत्तर

सबसे बढ़िया उत्तर

मैं इसे getattr() का उपयोग करके काम करने के लिए प्राप्त करता हूं।

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

चर का उपयोग करते समय:

y='types1'
x='r_q2'

getattr(User1, y)[x].label

कोई समस्या नहीं होगी।

1
Ulvi 27 सितंबर 2020, 21:11