वास्तव में एक अंतर है जहां आप एक-से-एक फ़ील्ड डालते हैं, क्योंकि विलोपन अलग-अलग व्यवहार करता है। जब आप किसी ऑब्जेक्ट को हटाते हैं, तो उस ऑब्जेक्ट को संदर्भित करने वाले एक-दूसरे संबंधों में से किसी एक ऑब्जेक्ट को हटा दिया जाएगा। यदि इसके बजाय आप एक ऑब्जेक्ट को हटाते हैं जिसमें एक-से-एक फ़ील्ड होता है (यानी यह अन्य ऑब्जेक्ट्स का संदर्भ देता है, लेकिन अन्य ऑब्जेक्ट्स इसे वापस संदर्भित नहीं कर रहे हैं), कोई अन्य ऑब्जेक्ट हटा नहीं जाता है।
उदाहरण के लिए:
class A(models.Model):
pass
class B(models.Model):
a = models.OneToOneField(A)
आप एक हटाते हैं, तो डिफ़ॉल्ट बी द्वारा के रूप में अच्छी तरह से हटा दिया जाएगा (हालांकि आप यह सिर्फ ForeignKey साथ की तरह OneToOneField पर on_delete तर्क को संशोधित करके ओवरराइड कर सकते हैं)। बी हटाने से ए को हटाया नहीं जाएगा (हालांकि आप बी पर डिलीट() विधि को ओवरराइड करके इस व्यवहार को बदल सकते हैं।
आपके शुरुआती प्रश्न पर वापस आना एक बनाम है- ए, यदि ए में बी है, बी में एक-एक-एक फ़ील्ड होना चाहिए (बी केवल अस्तित्व में होना चाहिए, लेकिन ए अस्तित्व में हो सकता है बी)।
स्रोत
2012-05-23 20:58:02
ठीक है, यही सवाल है।मुझे कैसे पता चलेगा कि क्या अधिक समझ में आता है? कभी-कभी कोई अंतर नहीं होता है और दोनों तरीके समान रूप से संभव होते हैं। – aemdy
इस तरह के उदाहरणों में, यह पूरी तरह से आपके ऊपर है। मुझे नहीं लगता कि एक निश्चित जवाब है। – Brandon