2011-01-27 15 views
15

ठीक है तो मैं अच्छा संगठित कोड लिखने और वास्तव में अलग-अलग django ऐप्स लिखने की कोशिश कर रहा हूं, सब कुछ एक साथ लंपने के बजाय 1. मेरी समस्या यह है कि मेरे पास 3 ऐप्स हैं जो प्रत्येक संदर्भ 1 अन्य मॉडल से अगला ऐप तो मूल रूप से मेरे पास एक अंतहीन पाश है, ऐप ए को बीएमडल्स.something1 के बारे में जानने की जरूरत है, ऐप बी को सी। मॉडल के बारे में पता होना चाहिए। सोथिंग 2, और ऐप सी को एमोडल्स.something3 के बारे में जानना आवश्यक है। यह निश्चित रूप से नहीं चलेगा, उन लोगों के लिए जो सोचते हैं कि यह वास्तव में एक समस्या है :)। क्या कक्षाओं के पूर्ववर्ती जैसा कुछ भी है, इसलिए पाइथन को पता चलेगा कि कक्षाएं वास्तव में मौजूद हैं?Django/पायथन परिपत्र मॉडल संदर्भ

धन्यवाद।

संपादित करें: अधिक कोड: दुर्भाग्यवश मेरी परियोजना की प्रकृति और मॉडल गोपनीय हैं इसलिए मुझे नामों को पूरी तरह से अलग करने के लिए नाम बदलना होगा, लेकिन कोड वही रहेगा।

शिक्षक/models.py

from django.db import models 
from myapp.student.models import * 
from django.contrib.auth.models import User 
class Teacher(models.Model): 
    """(description)""" 
    user = models.ForeignKey(User) 
    name = models.CharField(max_length=100) 
    phone = models.CharField(max_length=13) 
    phone_ext = models.CharField(blank=True, max_length=5) 
    fax = models.CharField(blank=True, max_length=13) 
    fax_ext = models.CharField(blank=True, max_length=100) 
    url = models.URLField(blank=True, verify_exists=True) 
    complaint = models.ManyToManyField(Complaint) 
    city = models.CharField(blank=True, max_length=100) 
    state = models.CharField(blank=True, max_length=100) 
    postal_code = models.CharField(blank=True, max_length=15) 
    location = models.ManyToManyField(Location) 
    def __unicode__(self): 
     return self.name 
class Location(models.Model): 
    """(description)""" 
    city = models.CharField(blank=True, max_length=100) 
    state = models.CharField(blank=True, max_length=100) 
    country = models.CharField(blank=False, max_length=100) 
    def __unicode__(self): 
     return self.city + ", " + self.state +", "+self.country 

छात्र/models.py

from django.db import models 
from django.contrib.auth.models import User 
from myapp.school.models import School 

class Student(models.Model): 
    """(Student description)""" 
    user = models.ForeignKey(User) 
    country = models.CharField(max_length=100) 
    state = models.CharField(max_length=100) 
    city = models.CharField(max_length=100) 
    locale = models.CharField(blank=False, max_length=5) 
    learningtype = models.CharField(blank=True, max_length=100) 
    sites = models.TextField(blank=True) 
    def __unicode__(self): 
     return str(self.user) 

class Complaint(models.Model): 
    """(Complaint description)""" 
    student = models.ForeignKey(Student) 
    site = models.ForeignKey(School) 
    complaint = models.TextField(blank=False) 
    def __unicode__(self): 
     return str(self.site) 

स्कूल/models.py

from django.db import models 
from myapp.teacher.models import Location 
class School(models.Model): 
    """(School description)""" 
    name = models.CharField(max_length=100) 
    url = models.URLField(verify_exists=True) 
    img = models.ImageField(upload_to="casion_img/") 
    rating = models.FloatField() 
    description = models.CharField(blank=True, max_length=300) 
    goodstanding = models.BooleanField(default=True) 
    location = models.ForeignKey(Location) 
    def __unicode__(self): 
     return self.name 

तो यहाँ है कि मैं क्या हो रही है:

फ़ाइल "/ उपयोगकर्ता/उपयोगकर्ता/डीजे ango/myapp/school/models.py ", लाइन 2, में शिक्षक.मोडल्स आयात स्थान फ़ाइल" /Users/userzero/django/myapp/teacher/models.py ", पंक्ति 2, में छात्र.मोडल्स से फ़ाइल आयात शिकायत फ़ाइल "/Users/userzero/django/myapp/student/models.py", लाइन 3, में स्कूल से। मॉडल आयात करें स्कूल फ़ाइल "/Users/userzero/django/myapp/casino/models.py" , पंक्ति 2, teacher.models से में आयात स्थान ImportError: आयात नहीं कर सकते नाम स्थान

+0

आयात चक्र आवश्यक रूप से एक समस्या नहीं है। लेकिन बिना किसी कोड के हम यह नहीं समझ सकते कि यह वास्तव में क्या है। –

उत्तर

37

docs से:

To refer to models defined in another application, you can explicitly specify a model with the full application label. For example, if the Manufacturer model above is defined in another application called production, you'd need to use:

class Car(models.Model): 
    manufacturer = models.ForeignKey('production.Manufacturer') 

This sort of reference can be useful when resolving circular import dependencies between two applications.

अपने एप्लिकेशन के लिए

तो, उदाहरण के लिए बदल रहा है की कोशिश

location = models.ForeignKey(Location) 

को

location = models.ForeignKey('Location') 

ध्यान दें कि यदि इस मॉडल किसी भिन्न ऐप में है, तो आप (इस ओर इशारा करते हुए के लिए धन्यवाद @Bran) वह भी निर्दिष्ट करने की आवश्यकता है, उदा

location = models.ForeignKey('teacher.Location') 
+0

मुझे PycheckMate नहीं पता है, लेकिन ... यदि आपके Django ऐप्स काम करते हैं, और फिक्स एक दस्तावेज Django तकनीक है, तो मेरा अनुमान है कि गलती PyCheckMate –

+0

में है, यह काम नहीं करता है। क्यों सिंकब काम करता है जाहिर है कि ऐप्स को मेरी सेटिंग्स फ़ाइल से किसी भी तरह से हटा दिया गया है (ध्यान में रखते हुए मैंने इसे संपादित नहीं किया है और मैं इस परियोजना पर एकमात्र हूं, मुझे नहीं पता कि यह कैसे हुआ)। – UserZer0

+0

यह एक झटका है! समस्या के आपके विवरण से मॉडल स्ट्रिंग चीज़ को काम करना चाहिए। अगर ऐसा कुछ और नहीं होना चाहिए।क्या आप अपने तीनों ऐप्स में से प्रत्येक से सब कुछ हटाने का प्रयास कर सकते हैं और अपवाद को फेंकने तक इसे थोड़ा सा थोड़ा सा जोड़ सकते हैं। क्या आपके त्रुटि संदेश कोई अन्य संकेत देते हैं? जब मैं व्यवस्थापक साइट के साथ मॉडल पंजीकृत करने की कोशिश कर रहा था, तो मुझे आपकी तरह की त्रुटियां थीं (व्यवस्थापक मॉडलों को मान्य करने के लिए तैयार होने से पहले मॉडल को सत्यापित करने की कोशिश कर रहा था)। –

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