2010-03-19 3 views
14

आदेश उप फ़ोल्डरों में अपने मॉडल देने के लिए आवश्यक मैं के रूप में वर्णित here app_label मेटा क्षेत्र का उपयोग करने की कोशिश की।app_label के माध्यम से उप-निर्देशिका में मॉडल?

  • परियोजना
    • क्षुधा
      • foo
        • मॉडल
          • __init_:

            मेरे निर्देशिका संरचना इस तरह दिखता है _.py

          • bar_model.py

bar_model.py में मैं इस तरह मेरे मॉडल को परिभाषित:

from django.db import models 

class SomeModel(models.Model): 

    field = models.TextField() 

    class Meta: 
     app_label = "foo" 

मैं सफलतापूर्वक आयात कर सकते हैं मॉडल तो जैसे:

from apps.foo.models.bar_model import SomeModel 

हालांकि, चल रहा है:

./manage.py syncdb 

मॉडल के लिए तालिका का निर्माण नहीं करता। वर्बोज़ मोड में, हालांकि, मुझे लगता है कि ऐप "foo" ठीक से पहचाना गया है (यह सेटिंग.py में INSTALLED_APPS में है)। Foo के तहत model.py को मॉडल को स्थानांतरित करना काम करता है।

कुछ विशिष्ट app_label साथ या पूरे तंत्र कि syncdb द्वारा मान्यता प्राप्त किया जा रहा से इस मॉडल संरचना से बचाता है के साथ दर्ज नहीं किया सम्मेलन है?

उत्तर

18

Django देखें टिकट #10985: Explain how models can be organised in a directory

हो सकता है कि आप __init__.py में अपने मॉडल का आयात नहीं कर रहे हैं?

+0

निश्चित रूप से! अब यह काम कर रहा है। – nikola

+2

धन्यवाद! हाँ, आप उन्हें '__init में आयात करने के __ py' की आवश्यकता होगी। और उन्हें देने के एक' मॉडल 'Meta' वर्ग के माध्यम से app_label'। –

+0

महत्वपूर्ण @ mustafa.0x से इसके अलावा आप * चाहिए *) एक ही app_label लेबल नाम से आप मॉड्यूल का नाम या एक आप AppConfig रजिस्ट्री में प्रदान नहीं तो यह एक खाली OrderedDict वापसी होगी (के रूप में प्रदान करता है, तो आप apps.get_app_config मिल प्रदान करते हैं ('app_label')। django.apps.apps आयात करने के बाद मॉडल – danigosa

3

syncdb<appname>.models में स्थित मॉडल के लिए टेबल नहीं बनाएगा, इसलिए इसे वहां आयात करें, उदा। from apps.foo.models import SomeModel

+0

नहीं, है कि या तो काम नहीं करता है, यानी syncdb SomeModel लेने नहीं करता है। – nikola

+0

संपादित करें: अब मुझे एहसास है कि आप वान गैले के समान दिशा में इंगित कर रहे थे। मैंने उसे सही उत्तर के रूप में चिह्नित किया है क्योंकि इसमें app_label के उचित दस्तावेज़ीकरण के बारे में चर्चा का एक लिंक भी शामिल है। – nikola

संबंधित मुद्दे