मेरे मॉडल विभाग में डेटा जोड़ने के लिए फ़ेकर स्क्रिप्ट में एक फ़ंक्शन। <कोड> विभाग = ['आईटी', 'सी.एस.ई', 'एम.ई.', 'ई.सी.'] def add_dept (): d = डिपार्टमेंट.ऑब्जेक्ट्स.get_or_create(dept_name=random.choice(depatment))[0]

3
Silver Sky 29 मई 2020, 20:43

4 जवाब

ऐसा इसलिए है क्योंकि get_or_create एक टपल देता है और आप आमतौर पर केवल प्राप्त या निर्मित object (पहला तत्व) में रुचि रखते हैं, न कि बूलियन यह दर्शाता है कि वस्तु अभी बनाई गई थी (दूसरा तत्व)।

दस्तावेज़ीकरण get_or_create:

(object, created) का टपल लौटाता है, जहां object पुनर्प्राप्त या बनाई गई वस्तु है और created एक बूलियन है जो निर्दिष्ट करता है कि कोई नई वस्तु बनाई गई थी या नहीं।

यद्यपि आप वाक्यविन्यास का भी उपयोग कर सकते हैं:

def add_dept():
    d, _ = Department.objects.get_or_create(dept_name=random.choice(depatment))
1
Henry Woody 29 मई 2020, 20:46

क्योंकि .get_or_create(…) [Django-doc] एक 2-टुपल लौटाएं जहां पहला आइटम Department ऑब्जेक्ट है जिसे बनाया या प्राप्त किया गया है, और दूसरा एक बूलियन है (True या False) यानी True अगर ऑब्जेक्ट का निर्माण किया गया था, जैसा कि दस्तावेज़ीकरण में निर्दिष्ट है:

(object, created) का टपल लौटाता है, जहां object पुनर्प्राप्त या बनाई गई वस्तु है और created एक बूलियन है जो निर्दिष्ट करता है कि कोई नई वस्तु बनाई गई थी या नहीं।

[0] जोड़कर, आप इस प्रकार 2-टुपल का पहला आइटम प्राप्त करते हैं: विभाग, और इस प्रकार बूलियन को त्याग दें।

1
Willem Van Onsem 29 मई 2020, 20:48

get_or_create() एक क्वेरीसेट विधि है, जो एक टपल (d, created) लौटाती है। जहां object मॉडल इंस्टेंस है और created boolean फ्लैग है जो हमें बताता है कि ऑब्जेक्ट बनाया गया है या नहीं।

तो इस तरह की पहली अनुक्रमणिका प्राप्त करके

Department.objects.get_or_create(dept_name=random.choice(depatment))[0]

आप वास्तव में (d, created)[0] कर रहे हैं जो हमेशा वस्तु लौटाता है। ऐसा करने का एक बेहतर तरीका अंडरस्कोर (_) का उपयोग करके बनाए गए ध्वज को अनदेखा करना है, जैसे:

d, _ = Department.objects.get_or_create(dept_name=random.choice(depatment))

संदर्भ: https://docs.djangoproject.com /en/3.0/ref/models/querysets/#get-or-create

3
varnothing 30 मई 2020, 07:45

जिस फ़ंक्शन को आप कॉल कर रहे हैं वह एक सूची या टुपल देता है। किसी भी मामले में, [0] केवल परिणाम से पहला तत्व निकालता है, और किसी भी शेष परिणाम को दूर फेंक देता है।

0
phrodod 29 मई 2020, 20:46