2011-06-08 19 views
5

हाल ही में मैंने एक ऐप को दो अलग-अलग हिस्सों में विभाजित किया क्योंकि मेरे पास 15+ मॉडल थे। मुझे "सर्कुलर आयात त्रुटि" मिली थी। इस मैं इस लेखन की कोशिश की हल करने के लिए:परिपत्र आयात से बचने की कोशिश

from django.db import models 

class App1Model(models.Model): 
    app2model = models.ForeignKey(app2.App2Model) 

त्रुटि मैं हो रही है: "NameError: नाम 'APP2' परिभाषित नहीं है"। लेकिन ऐप 2 को इंस्टॉल किए गए ऐप्स और पथ में सही ढंग से जोड़ा गया है।

project 
    -app1 
     --models.py 
    -app2 
     --models-py 

उत्तर

13

ForeignKey अर्थात models.ForeignKey('app2.App2Model') एक तर्क के रूप में एक स्ट्रिंग ले जा सकते हैं,। बेशक, आपको किसी भी परिपत्र निर्भरताओं से बचने के लिए अपने कोड को डिजाइन करने का प्रयास करना चाहिए।

+0

लेकिन यदि आप अपने कोड में somehwere मॉडल की जरूरत है क्या होता है। मेरे पास पर्याप्त कार्य हैं जिन्हें एक मॉडल या किसी अन्य के फ़ंक्शन की आवश्यकता होती है? –

+1

@ हंसदेजोंग परिपत्र संबंध मत बनाओ। यदि आपको वास्तव में आवश्यकता है तो 'get_model' या फ़ंक्शन-स्तरीय आयात का उपयोग करें। –

1

तुम अब भी एक आयात बयान की आवश्यकता चाहिए

import app2.App2Model 

लेकिन अगर APP2 आयात APP1 आपको कोई त्रुटि मिलती हैं आप की तरह उल्लेख किया है।

2

मैं परिपत्र निर्भरता से बचने के लिए कोड को डिजाइन करने के बारे में बिल्ली प्लस प्लस के साथ सहमत हैं, लेकिन आप करने के लिए सक्षम नहीं होना चाहिए:

try: 
    import app.model 
except ImportError: 
    pass 
+0

हैकी। लेकिन एक चुटकी में, यह काम करता है ..! धन्यवाद – awidgery

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