জাঙ্গো মডেলের শ্রেণীর নাম পান


107

আমার একটি জ্যাঙ্গো মডেল রয়েছে:

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

এবং আমি মডেলটির নামটি স্ট্রিং হিসাবে রাখতে চাই: 'বুক'। যখন আমি এটি এভাবে পাওয়ার চেষ্টা করি:

Book.__class__.__name__

এটি 'মডেলবেস' ফেরত দেয়।

কোন ধারণা?

উত্তর:


153

ব্যবহার করে দেখুন Book.__name__

ModelBaseজাজানো মডেলগুলি থেকে উত্পন্ন , যা সমস্ত মডেলের মেটাক্লাস ac


49

Book.__class__.__name__ক্লাস নিজেই করার পরিবর্তে , আপনি যদি এটি কোনও বইয়ের বস্তুতে করেন তবে book_object.__class__.__name__আপনাকে 'বুক' দেবে (অর্থাত্ মডেলের নাম)


1
এই আমার ক্ষেত্রে আমাকে সাহায্য করেছিল helped আমি 2 টি ক্যোয়ারসেটগুলি একত্রিত করেছি যা বিভিন্ন মডেলের। যখন আমি পুনরাবৃত্তি করছি তখন একটি লুপে আমার অবজেক্টের শ্রেণি নামটি নেওয়া দরকার।
পিটার

পিটার, আপনি কীভাবে দুটি প্রশ্নের সন্ধান করেছেন ?? বা একীভূত সেটটি কেবলমাত্র মডেল উদাহরণগুলির একটি তালিকা ?? ধন্যবাদ
লিটল

38

উপরের উত্তর দ্বারা পরামর্শ হিসাবে , আপনি ব্যবহার করতে পারেন str(Book._meta)

এই প্রশ্নটি বেশ পুরানো, তবে আমি নিম্নলিখিত সহায়কটি পেয়েছি (জ্যাঙ্গো 1.11 এ পরীক্ষা করা হয়েছে তবে এটি পুরানো ক্ষেত্রে কাজ করতে পারে ...), কারণ আপনার একাধিক অ্যাপ্লিকেশন থেকে একই মডেলের নামও থাকতে পারে।

ধরে নিচ্ছি বইটি এতে রয়েছে my_app:

print(Book._meta.object_name)
# Book

print(Book._meta.model_name)
# book

print(Book._meta.app_label)
# my_app

2
জ্যাঙ্গোর নতুন সংস্করণগুলির জন্য এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
ববোর্ট

আপনি সঠিক @ জিজোর্ট, এটি জ্যাঙ্গো সংস্করণেও কাজ করছে 2.2.3
কুশন গুণসেকের

8

আমি ক্লাসের নাম ব্যবহার করে পেয়েছি,

str(Book._meta)

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

ধন্যবাদ; str(self.model._meta)আমি যা খুঁজছিলাম অন্য হিসাবে আমাকে অভিভাবক ক্লাস দিন।
পাইপথন

যদি আপনি স্ট্রিং-এর কলের চেয়ে আরও কিছু অন্তর্নিহিত চান তবে আপনি একইটি (জাঙ্গো 1.11 এ চেষ্টা করেছেন) সহ পেতে পারেন: Book._meta.object_nameবা Book._meta.model_name। তারপরে আপনি যদি অ্যাপটির নামও চান, তবে Book._meta.app_label
এটির

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এবং al verbose_name_pluralচ্ছিক। জ্যাঙ্গো মডেল শ্রেণীর নাম থেকে এই মানগুলি নির্ধারণ করবে (আপনি অ্যাডমিন সাইটে এই মানগুলির ব্যবহার লক্ষ্য করেছেন)।

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.