2012-05-31 15 views
6

के बाद मैं फ़ाइलों कि डीबी में पहले से ही में कुछ मॉडल है कि एक मॉडल फ़ोल्डर है। मैं सिर्फ एक और फ़ाइल/मॉडल को शामिल किया है लेकिन जब मैं syncdb चलाने यह DB में जोड़ा नहीं जा रहा है। मैंने manage.py मान्य करने की कोशिश की है और यह ठीक चल रहा है। मैं भी कोड के चलने तथा यह केवल विफल रहता है जब इसके साथ "तालिका मौजूद नहीं है" को बचाने के लिए प्रयास करता है।Django मॉडल डीबी में नहीं दिख रहा syncdb

मूल संरचना इस तरह था: file1.py
- - - init __ .py
__
/मॉडल
file2.py

और __

from file1 import File1Model 
from file2 import File2Model 
012: init __
.py की तरह दिखाई देता

मैं file3.py
/मॉडल
जोड़ा - __ init .py
__ - file1.py
- file2.py
- file3.py

और संशोधित init __ .py

from file1 import File1Model 
from file2 import File2Model 
from file3 import File3Model 
__

और फ़ाइल 3 की सामग्री (नामों को निर्दोषों की रक्षा के लिए बदला जा सकता है, लेकिन इसके अलावा इसकी सटीक फ़ाइल):
अपडेट: केवल प्राथमिक कुंजी जोड़ने की कोशिश की गई है क्योंकि आईडी फ़ील्ड स्वचालित रूप से जोड़े गए हैं पूर्णांक प्राथमिक कुंजी आईडी। कुछ बदलावों की कोशिश की लेकिन कोई पासा नहीं।

from django.db import models 
from django.contrib.auth.models import User 


class File3Model(models.Model): 
    user = models.OneToOneField(User) 
    token = models.CharField(max_length=255, blank=False, null=False) 
    id = models.CharField(primary_key=True, max_length=255) 

    class Admin: 
     pass 

    class Meta: 
     app_label = 'coolabel' 

    def __unicode__(self): 
     return self.user.username 

    @staticmethod 
    def getinstance(user, token, id): 
     try: 
      instance = File3Model.objects.get(pk=id) 
      if instance.token != token: 
       instance.token = token 
       instance.save() 
      return instance 
     except: 
      pass 
     instance = File3Model() 
     instance.user = user 
     instance.token = token 
     instance.id = id 
     instance.save() 
     return instance 

तो इस उदाहरण में, File1Model और File2Model डीबी में पहले से ही कर रहे हैं और syncdb के बाद डीबी में रहते हैं। हालांकि, File3Model नहीं जोड़ा गया है syncdb का पुनर्प्रसारण के बाद भी। क्या यह पता लगाने का कोई तरीका है कि नया मॉडल क्यों नहीं जोड़ा जा रहा है ??

+0

क्या आपने 'syncdb --all' को आजमाया था? – sultan

+0

अभी कोशिश की लेकिन अभी भी काम नहीं कर रहा है। – ntrrobng

उत्तर

0

बूम!

मैं नए मॉडल के लिए एक अलग ऐप_लेबल का उपयोग कर रहा था लेकिन यह मॉडल समूह में समान होना चाहिए।

अन्य मॉडल लेबल "mediocrelabel" थे और मेरे नए मॉडल में लेबल "कूलबेल" था। मैंने नए मॉडल के लेबल को "mediocrelabel" में बदल दिया और अब उन्हें डीबी में सही तरीके से जोड़ा जा रहा है।

आपकी मदद के लिए धन्यवाद, दोस्तों!

9

यदि आप मॉडल.py के बाहर मॉडल को परिभाषित करते हैं, तो आपको क्लास पर app_label विशेषता सेट करना होगा।

संपादित करें: app_label को आपके INSTALLED_APPS सेटिंग में एक ऐप का संदर्भ देना होगा। यह शायद ऐप के नाम से मेल खाना चाहिए कि मॉडल निर्देशिका में है, जब तक कि आपको अन्यथा करने का वास्तव में अच्छा कारण न हो। ऐसा लगता है कि यहां आपकी समस्या है।

class File3Model(models.Model): 
    foo = models.CharField(...) 
    ... 

    class Meta: 
     app_label = "my_app" 

ध्यान दें कि syncdb डाटाबेस से किसी भी तालिका को दूर कभी नहीं होगा। मॉडल.py को निर्देशिका संरचना के साथ प्रतिस्थापित करने से पहले अन्य तालिकाओं को शायद सिंकडब के साथ बनाया गया था।

+0

ऐप_लेबल फ़ील्ड मेटा क्लास में सेट है लेकिन यह अभी भी डीबी में नहीं जोड़ा गया है। – ntrrobng

+0

'app_label' को आपके 'INSTALLED_APPS' सेटिंग में एक ऐप होना चाहिए। मैंने इसे उत्तर में जोड़ा है। – Alasdair

0

तुम क्यों आप मॉडल को विभाजित किया था और होने मॉडल models.py में मॉडल रखने के बजाय फ़ोल्डर?

अपने ही परियोजना में लगभग 10 मॉडल देखते हैं models.py में रहते हैं और मैं इसके साथ ठीक हूँ।

आप manage.py syncdb --all भी आजमा सकते हैं।

और मुझे लगता है कि सभी मॉडलों को एक ही फाइल में रखना बेहतर है और उन्हें जैसे models/__init__.py में आवश्यक मॉडल आयात करने के लिए ध्यान में रखना बेहतर है। जिस तरह से आप कई समस्याओं और लंबी लाइनों के आयात से बचते हैं और इस पर ध्यान नहीं देते कि some_modelmodels/*.py फ़ाइलों के बीच रहता है।

धन्यवाद,

सुल्तान

+0

आपकी सलाह के लिए धन्यवाद। हालांकि, मैं मौजूदा कोड के साथ काम कर रहा हूं और अनुमान लगाया कि यह सबकुछ वापस ले जायेगा ताकि आप सबकुछ वापस मॉड्यूल.py फाइल में ले जा सकें। मैं मॉडल निर्देशिका में सबकुछ रखना पसंद करूंगा। – ntrrobng

1

मेरे ऐप में app_label सेट मेरी समस्या हल करता है।

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