सवाल Django मॉडल का वर्ग नाम प्राप्त करें


मेरे पास एक django मॉडल है:

class Book(models.Model):
  [..]

और मैं मॉडल नाम स्ट्रिंग के रूप में रखना चाहता हूं: 'पुस्तक'। जब मैं इसे इस तरह से प्राप्त करने का प्रयास करता हूं:

Book.__class__.__name__

यह 'मॉडलबेस' देता है।

कोई उपाय?


76
2017-08-30 10:25


मूल




जवाब:


प्रयत्न Book.__name__

Django मॉडल से व्युत्पन्न हैं ModelBase, जो सभी मॉडलों के लिए मेटाक्लास है।


105
2017-08-30 10:29





करने के बजाय Book.__class__.__name__ कक्षा पर ही, यदि आप इसे किसी पुस्तक ऑब्जेक्ट पर करते हैं, तो book_object.__class__.__name__ आपको 'बुक' देगा (यानी मॉडल का नाम)


39
2017-10-21 06:41



इसने मुझे मेरे मामले में मदद की। मैंने 2 क्वेरीसेट विलय किए जो विभिन्न मॉडलों के हैं। एक लूप में जब मैं पुनरावृत्ति कर रहा हूं तो मुझे ऑब्जेक्ट का क्लास नाम प्राप्त करने की आवश्यकता थी। - Peter
पीटर, आपने दो क्वेरीसेट कैसे मर्ज किए ?? या मर्ज किए गए सेट सिर्फ मॉडल उदाहरणों की एक सूची है ?? धन्यवाद - little_birdie


मुझे कक्षा का उपयोग करके नाम मिला,

str(Book._meta)

Book.__class__.__name__  -> this will give you the ModelBase

4
2017-07-26 07:59



धन्यवाद; str(self.model._meta) जिसकी मुझे तलाश थी वह है; जैसा कि दूसरे मुझे माता-पिता वर्ग देते हैं। - ppython
यदि आप स्ट्रिंग के लिए कॉल से कुछ अधिक अंतर्निहित चाहते हैं, तो आप वही प्राप्त कर सकते हैं (Django 1.11 पर प्रयास किया गया): Book._meta.object_name या Book._meta.model_name। फिर यदि आप ऐप का नाम भी चाहते हैं, तो यह इसके माध्यम से सुलभ है Book._meta.app_label - Geekfish


class Book(models.Model):
  [..]   
  def class_name(self):
    return self.__class__.__name__

इस तरह, जब भी आप book.class_name (टेम्पलेट में भी कहते हैं {{book.class_name}}) यह कक्षा का नाम वापस करेगा जो 'बुक' है।


1
2018-01-30 11:25





जैसा कि सुझाव दिया गया है ऊपर जवाब, आप उपयोग कर सकते हैं str(Book._meta)

यह सवाल काफी पुराना है, लेकिन मुझे निम्नलिखित सहायक (Django 1.11 पर परीक्षण किया गया है, लेकिन पुराने पर काम कर सकता है ...), क्योंकि आपके पास एकाधिक ऐप्स से एक ही मॉडल नाम हो सकता है।

मान लीजिए बुक में है my_app:

print(Book._meta.object_name)
# Book

print(Book._meta.model_name)
# book

print(Book._meta.app_label)
# my_app

print(Book._meta.app_label)
# my_app.Book

1
2018-05-03 11:58