के संबंध में डीजेगो में ऑटो का मूल्य बढ़ाना पिछले एक के संबंध में एक क्षेत्र को ऑटोइनक्रिकेट करने का कोई तरीका है ... उदाहरण के लिए यदि पिछले रिकॉर्ड में मूल्य 09-0001 है, तो अगला रिकॉर्ड होना चाहिए असाइन किया गया 09-0002 और इतना ... विचार? मैं सहेजने की विधि को ओवरराइड करने के बारे में सोच रहा हूं, लेकिन वास्तव में मुझे कितना यकीन नहीं हैपिछले एक
पिछले एक
उत्तर
Django आपको मॉडल में एक से अधिक ऑटोफिल्ड नहीं होने देगा, और आपके पास पहले से ही आपकी प्राथमिक कुंजी के लिए एक है। तो आपको बचत को ओवरराइड करना होगा और बढ़ने के बारे में जानने के लिए शायद तालिका में वापस देखने की आवश्यकता होगी।
कुछ इस तरह:
class Product(models.Model):
code = models.IntegerField()
number = models.IntegerField()
...
def get_serial_number(self):
"Get formatted value of serial number"
return "%.2d-%.3d" % (self.code, self.product)
def save(self):
"Get last value of Code and Number from database, and increment before save"
top = Product.objects.order_by('-code','-number')[0]
self.code = top.code + 1
self.number = top.number + 1
super(Product, self).save()
# etc.
ध्यान रखें कि आपके बचाने विधि में ताला लगा किसी तरह का बिना, आप एक संगामिति समस्या में (दो धागे कोड और संख्या में एक ही मान संग्रहीत करने का प्रयास) चला सकते हैं।
ऑटोफ़ील्ड फ़ील्ड प्रकार है जो Django मॉडल बेस क्लास 'आईडी' प्रॉपर्टी के लिए उपयोग करता है, लेकिन आप इसे अतिरिक्त ऑटोइनक्रिकमेंट के लिए उपयोग कर सकते हैं खेत।
मुझे नहीं लगता कि आप अपने उदाहरण में किसी भी प्रारूपण कर सकते हैं, लेकिन एक अच्छा तरीका कस्टम फ़ील्ड प्रकार बनाना होगा जो इच्छित स्वरूपण करने के लिए सेव() विधि को ओवरराइड करता है।
मैं देखता हूं कि मैं यह कर सकता हूं ... मैंने सोचा था कि उस क्षेत्र के पिछले रिकॉर्ड के मूल्य को पुनः प्राप्त करने जैसे कुछ आसान तरीका था, फिर इसमें 1 जोड़ना। वैसे भी धन्यवाद –
:
+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| code | int(11) unsigned | NO | PRI | NULL | auto_increment |
+-------+------------------+------+-----+---------+----------------+
Django में:
self.code = None
self.number = top.number + 1
self.save() # or super(Product, self).save()
जब बचाया, code
स्वचालित रूप से बढ़ जाएगी।
- 1. पिछले एक
- 2. पिछले
- 3. पिछले
- 4. पिछले $
- 5. लोड एक पिछले मॉडल संस्करण
- 6. : पिछले वाले बच्चे पिछले तत्व
- 7. पिछले बुधवार
- 8. पिछले घंटे
- 9. त्रुटि: "पिछले एक घोषणा यहाँ है"
- 10. नियमित अभिव्यक्ति सब को छोड़कर पिछले एक
- 11. कब्जा पिछले उत्पादन
- 12. jstl foreach पिछले रिकॉर्ड
- 13. पिछले महीने जावास्क्रिप्ट में
- 14. Nlog: पिछले एक्स संदेशों
- 15. वाईएक्स - हमेशा पिछले संस्करण
- 16. सी # में पिछले datetime
- 17. पीडीओ पिछले आईडी डाला
- 18. ट्रिम पिछले "," VB.NET
- 19. FragmentManager.popBackStack() केवल पिछले Fragment
- 20. सबवर्सन को पिछले
- 21. ! जावास्क्रिप्ट में पिछले कार्य?
- 22. पिछले यूआरएल पर रीडायरेक्ट?
- 23. पिछले 30 दिनों
- 24. SVN: पिछले संस्करण
- 25. PHPExcel पिछले $ उच्चतम रो
- 26. xsl - पिछले पिछला भाई
- 27. पिछले ड्रॉपडाउन चयन
- 28. जाओ पिछले mysql2 मणि
- 29. विजुअल स्टूडियो आईडीई - पिछले
- 30. जावा लिंक्डलिस्ट पिछले
समवर्ती समस्याओं को ठीक करने के लिए आप 'top = product.objects.select_for_update (nowait = True) का उपयोग कर सकते हैं .order_by ('- code', '- number') [0]' –
हां, 'select_for_update()' का उपयोग करें, लेकिन सुनिश्चित करें कि आपका आरडीबीएमएस पहले पंक्ति लॉकिंग का समर्थन करता है! (हाल ही में MySQL और Postgres करते हैं)। – Seth