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


107

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

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

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

Book.__class__.__name__

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

कोई उपाय?

जवाबों:


153

कोशिश करो Book.__name__

Django मॉडल से ली गई हैं ModelBase, जो सभी मॉडलों के लिए मेटाक्लास है।


49

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


1
इसने मेरे मामले में मेरी मदद की। मैंने 2 क्वेरी का विलय कर दिया है जो विभिन्न मॉडलों की हैं। लूप में मुझे ऑब्जेक्ट का वर्ग नाम प्राप्त करने की आवश्यकता होती है जब मैं पुनरावृत्ति कर रहा होता हूं।
पीटर

पीटर, आपने दो क्वेरी कैसे मर्ज की ?? या मर्ज सेट सिर्फ मॉडल उदाहरणों की एक सूची है ?? धन्यवाद
little_birdie

38

जैसा कि ऊपर दिए गए उत्तर से पता चलता है , आप उपयोग कर सकते हैं 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

2
यह Django के नए संस्करणों के लिए स्वीकृत उत्तर होना चाहिए।
बोबोर्ट

आप @ याकूब सही हैं, यह Django संस्करण पर 2.2.3भी काम कर रहा है।
कुषाण गुणसेकेरा

8

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

str(Book._meta)

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

धन्यवाद; str(self.model._meta)जिसकी मुझे तलाश थी वह है; जैसा कि दूसरे ने मुझे मूल वर्ग दिया है।
13

यदि आप किसी कॉल को स्ट्रिंग से अधिक अंतर्निहित चाहते हैं, तो आप उसी के साथ (Django 1.11 पर कोशिश की) प्राप्त कर सकते हैं: Book._meta.object_nameया Book._meta.model_name। फिर यदि आप ऐप का नाम भी चाहते हैं, तो इसके माध्यम से सुलभ हैBook._meta.app_label
Geekfish

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

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


3

आप मॉडल के मेटा क्लास से मॉडल का नाम भी प्राप्त कर सकते हैं। यह मॉडल वर्ग के साथ-साथ इसके किसी भी उदाहरण पर काम करता है:

# Model definition
class Book(models.Model):
    # fields...

    class Meta:
        verbose_name = 'book'
        verbose_name_plural = 'books'


# Get some model
book = Book.objects.first()

# Get the model name
book._meta.verbose_name

सेटिंग verbose_nameऔरverbose_name_plural वैकल्पिक है। Django इन मूल्यों को मॉडल वर्ग के नाम से हटाएगा (आपने उन मानों का उपयोग व्यवस्थापक साइट में देखा होगा)।

https://docs.djangoproject.com/en/3.0/ref/models/options/#verbose-name

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.