জাজানো - বিজ্ঞপ্তি মডেল আমদানির বিষয়টি


116

আমি সত্যিই এটি পাচ্ছি না, সুতরাং যদি কেউ ব্যাখ্যা করে যে কীভাবে এটি কাজ করে তবে আমি এটির খুব প্রশংসা করব। আমার দুটি অ্যাপ্লিকেশন রয়েছে, অ্যাকাউন্ট এবং থিম ... এখানে আমার সেটিংসের তালিকা রয়েছে:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'accounts',
    'themes',
)

অ্যাকাউন্টগুলিতে, আমি এটি করার চেষ্টা করছি:

from themes.models import Theme

class Account(models.Model):
    ACTIVE_STATUS = 1
    DEACTIVE_STATUS = 2
    ARCHIVE_STATUS = 3
    STATUS_CHOICES = (
        (ACTIVE_STATUS, ('Active')),
        (DEACTIVE_STATUS, ('Deactive')),
        (ARCHIVE_STATUS, ('Archived')),
    )

    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=250)
    slug = models.SlugField(unique=True, verbose_name='URL Slug')
    status = models.IntegerField(choices=STATUS_CHOICES, default=ACTIVE_STATUS, max_length=1)
    owner = models.ForeignKey(User)
    enable_comments = models.BooleanField(default=True)
    theme = models.ForeignKey(Theme)
    date_created = models.DateTimeField(default=datetime.now)

এবং আমার থিম মডেল:

class Theme(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=250)
    slug = models.SlugField(unique=True, verbose_name='URL Slug')
    date_created = models.DateTimeField(default=datetime.now)

class Stylesheet(models.Model):
    id = models.AutoField(primary_key=True)
    account = models.ForeignKey(Account)
    date_created = models.DateTimeField(default=datetime.now)
    content = models.TextField()

জ্যাঙ্গো নিম্নলিখিত ত্রুটিটি বের করে দিচ্ছেন:

from themes.models import Theme
ImportError: cannot import name Theme

এটি কি কোনও ধরণের বিজ্ঞপ্তি আমদানির সমস্যা? আমি অলস রেফারেন্স ব্যবহার করার চেষ্টা করেছি, তবে এটিও কাজ করে না বলে মনে হয়!


1
এটি বৃত্তাকার আমদানি সহ কোনও সমস্যার মতো দেখায় না। Accountযেখানে Themeসংজ্ঞা দেওয়া হয়েছে সেখানে কেন আপনার আমদানি করা দরকার ?
ডমিনিক রজার

দুঃখিত, আমি আমার থিমস মডেলটি সঠিকভাবে আটকাননি, আমি আমার পোস্টটি আপডেট করেছি। আমি এটি স্টাইলশিট ক্লাসে ব্যবহার করছি।
হানপান

উত্তর:


213

আমদানি সরান Themeএবং পরিবর্তে স্ট্রিং হিসাবে মডেল নামটি ব্যবহার করুন।

theme = models.ForeignKey('themes.Theme')

5
আসলে এটি হওয়া দরকার 'themes.Theme'যেমন এটি অন্য অ্যাপে রয়েছে।
ড্যানিয়েল রোজম্যান 16

আহ, এটি কাজ করেছে, আমি আগে কেবল 'থিম' চেষ্টা করছিলাম এবং এটি কার্যকর হয়নি। ধন্যবাদ। এইভাবে এটি করার জন্য কি কোনও ধরণের পারফরম্যান্স হিট হয়েছে? আমি যদি সম্ভব হয় তবে আমার লুকোচুরিগুলি অলস রাখতে চাই :)
হ্যানপান

@ ড্যানিয়েল: আপডেট হয়েছে। @ হানপান: হ্যাঁ, ছোট। তবে শুধুমাত্র একবার।
ইগনাসিও ওয়াজকেজ-আব্রামস

56

জ্যাঙ্গো ১.7 পর্যন্ত:

অলস মডেল আমদানির জন্য ডিজাইন করা হয়েছে যা get_modelথেকে ফাংশন ব্যবহার করুন . django.db.models:

from django.db.models import get_model
MyModel = get_model('app_name', 'ModelName')

তোমার ক্ষেত্রে:

from django.db.models import get_model
Theme = get_model('themes', 'Theme')

এখন আপনি ব্যবহার করতে পারেন Theme

জাজানো 1.7+ এর জন্য:

from django.apps import apps
apps.get_model('app_label.model_name')

10
জাজানো 1.7+ ব্যবহার করুন apps.get_model(app_label, model_name)বাapps.get_model('app_label.model_name')
ফোবিস

51

পর্যাপ্ত বিশদে আমি কোথাও উল্লেখ না করে দেখেছি এমন কিছু হ'ল বিদেশীকির অভ্যন্তরে স্ট্রিংটি কীভাবে সঠিকভাবে তৈরি করতে হয় যখন কোনও আলাদা অ্যাপ্লিকেশনে কোনও মডেল উল্লেখ করে। এই স্ট্রিং করা প্রয়োজন app_label.model_name। এবং, খুব গুরুত্বপূর্ণ বিষয়, এটি app_labelINSTALLED_APPS এ সম্পূর্ণ লাইন নয়, তবে এটির কেবলমাত্র শেষ উপাদান । সুতরাং যদি আপনার INSTALLED_APPS এর মত দেখাচ্ছে:

INSTALLED_APPS = (
...
    'path.to.app1',
    'another.path.to.app2'
)

তারপরে একটি অ্যাপ্লিকেশন 1 মডেলটিতে একটি বিদেশী কীকে অ্যাপ 2-র একটি মডেলের সাথে অন্তর্ভুক্ত করার জন্য আপনাকে অবশ্যই এটি করতে হবে:

app2_themodel = ForeignKey('app2.TheModel')

আমি একটি বৃত্তাকার আমদানি সমস্যা সমাধানের চেষ্টা করার জন্য বেশ দীর্ঘ সময় অতিবাহিত করেছি (সুতরাং আমি কেবল এটি করতে পারিনি from another.path.to.app2.models import TheModel) আমি এতে হোঁচট খাওয়ার আগে, গুগল / এসও কোনও সহায়তা ছিল না (সমস্ত উদাহরণগুলির মধ্যে একক উপাদান অ্যাপ্লিকেশন রয়েছে), সুতরাং আশা করি এটি অন্যকে সহায়তা করবে জ্যাঙ্গো newbies।


40

যেহেতু জাজানো ১.7 সঠিক উপায়টি এইভাবে চলেছে:

from django.apps import apps

YourModel = apps.get_model('your_app_name', 'YourModel')

দেখুন: https://docs.djangoproject.com/ja/1.9/ref/applications/#django.apps.apps.get_model


5
এখানে একটি একক-আরগ শর্টকাট বাক্য গঠনও রয়েছে: ইত্যাদিতে apps.get_model('your_app_name.YourModel')ব্যবহারের জন্য সুবিধাজনকmap
টেলর এডমিস্টন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.