मैं django (v1.10.5) और पायथन में एक ऑनलाइन थिएटर बुकिंग ऐप बना रहा हूं।
Model.py:
TheaterLocation = [
(1, 'Naharlagun'),
]
FloorLevel = [
(1, 'Ground Floor'),
(2, 'Balcony'),
]
Row = [
]
Column = [
]
class Seat(models.Model):
theater_location = models.PositiveIntegerField(choices=TheaterLocation)
floor_level = models.PositiveIntegerField(choices=FloorLevel)
row_id = models.PositiveIntegerField()
column_id = models.PositiveIntegerField()
@property
def seat_id(self):
return "%s : %s : %s : %s" % (self.theater_location, self.floor_level, self.row_id, self.column_id)
मैं क्या करना चाहता हूं, Row
और Column
के लिए स्वचालित रूप से इस तरह विकल्पों की एक सूची बनाएं:
Row = [
(1, 'A'),
(2, 'B'),
...
...
(8, 'H'),
]
Column = [
1,2,3,4,5, ... , 22
]
मैं उपरोक्त की तरह कैसे प्राप्त कर सकता हूं?
2 जवाब
वर्तमान में गतिशील विकल्प मॉडल परिभाषा में परिभाषित नहीं किए जा सकते इसलिए आपको संबंधित ChoiceField पर कॉल करने योग्य।
आपके मामले में पंक्तियों को उत्पन्न करना इस तरह दिख सकता है:
def get_row_choices():
import string
chars = string.ascii_uppercase
choices = zip(range(1, 27), chars)
# creates an output like [(1, 'A'), (2, 'B'), ... (26, 'Z')]
return choices
class SeatForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(SeatForm, self).__init__(*args, **kwargs)
self.fields['row_id'] = forms.ChoiceField(choices=get_row_choices())
अब आप इस फॉर्म को अपने SeatAdmin
के लिए इस तरह इस्तेमाल कर सकते हैं:
class SeatAdmin(admin.ModelAdmin):
form = SeatForm
मैं यहां मान रहा हूं कि आप वास्तव में क्या करना चाहते हैं पंक्ति और कॉलम को मौजूदा इकाइयों पंक्ति और कॉलम से जोड़ना है। क्योंकि अन्यथा आप वैसे ही जाएंगे जैसे इसे ऊपर लागू किया गया है (आपके पास पहले से ही है)। लेकिन ध्यान रखें कि विकल्प टुपल्स होने के लिए होते हैं। उसके आस-पास के दस्तावेज़ देखें: https://docs.djangoproject.com/en/1.10/ref /मॉडल/फ़ील्ड/#विकल्प.
यदि आप उन्हें मौजूदा मॉडल वर्गों से जोड़ना चाहते हैं तो आप जो देख रहे हैं वह विदेशी कुंजी है।
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।