2013-04-17 10 views
11

मैं एक पुस्तकालय के लिए एक फॉर्म बनाने की कोशिश कर रहा हूं जहां कोई उपयोगकर्ता 2 क्रियाएं कर सकता है: एक नई पुस्तक जोड़ें या मौजूदा की संग्रहीत जानकारी खोलें। किताबों में 2 फ़ील्ड (शीर्षक और लेखक) हैं। प्रत्येक बार जब कोई नई पुस्तक बनाई जाती है, तो यह डेटाबेस में संग्रहीत होती है। किसी भी पहले बनाई गई पुस्तक को ड्रॉपडाउन सूची (केवल नाम) पर एक विकल्प के रूप में दिखाया गया है। मैं चाहता हूं कि जब कोई उपयोगकर्ता ड्रॉपडाउन सूची से कोई विकल्प चुनता है, तो चयनित पुस्तक की जानकारी स्क्रीन पर दिखाई देती है।संग्रहीत मॉडल की django फॉर्म ड्रॉपडाउन सूची

मैं 2 अलग-अलग दृष्टिकोणों की कोशिश कर रहा हूं, लेकिन उनमें से कोई भी मेरी आवश्यकताओं को पूरा नहीं करता है। एक तरफ, इस सवाल का django form dropdown list of numbers मुझे लगता है कि जैसे कुछ कोड के साथ विचारों पर एक ड्रॉपडाउन सूची बनाने के लिए, और मिल चयनित मान कर रहा हूँ निम्नलिखित:

class CronForm(forms.Form): 
    days = forms.ChoiceField(choices=[(x, x) for x in range(1, 32)]) 

def manage_books(request): 
    d = CronForm() 
    if request.method == 'POST': 
     day = request.POST.get('days') 

लेकिन मैं अपने विकल्पों पर पहले से संग्रहीत पुस्तकों होना चाहता हूँ डेटा बेस, और पूर्व परिभाषित मान नहीं।

मैंने कोशिश की एक अन्य दृष्टिकोण HTML टेम्पलेट से ऐसा करना है।

<form> 
    {% for book in list %} 
     <option value="name">{{ book.name }}</option> 
    {% endfor %} 
</form> 

कहाँ किताब इस से विचारों में प्रदान की गई है:: वहाँ मैं निम्नलिखित रूप बनाने जानकारी ड्रॉपडाउन सूची में दिखाया

l = Books.objects.all().order_by('name') 

इस दूसरे मामले में एक मैं चाहता हूँ, लेकिन मैं डॉन यह नहीं पता कि चयनित मूल्य कैसे प्राप्त करें और इसे विचारों पर कैसे उपयोग करें। शायद जावास्क्रिप्ट फ़ंक्शन का उपयोग कर रहे हैं?

तो मेरी 2 आवश्यकताएँ हैं: सूची (उपयोगकर्ता द्वारा डीबी पर संग्रहित) पर सही जानकारी दिखाने के लिए और पता करने के लिए जो एक चयनित किया गया है में सक्षम हो।

उत्तर

27

आप ModelChoiceField उपयोग करना चाहिए।

def show_book(request): 
    form = CronForm() 
    if request.method == "POST": 
     form = CronForm(request.POST) 
     if form.is_valid: 
     #redirect to the url where you'll process the input 
     return HttpResponseRedirect(...) # insert reverse or url 
    errors = form.errors or None # form not submitted or it has errors 
    return render(request, 'path/to/template.html',{ 
      'form': form, 
      'errors': errors, 
    }) 

एक नई किताब जोड़ने के लिए या एक संपादित करते हैं, आप एक ModelForm का उपयोग करना चाहिए करने के लिए:

class CronForm(forms.Form): 
    days = forms.ModelChoiceField(queryset=Books.objects.all().order_by('name')) 

फिर अपने विचारों, यह कुछ इस तरह देखना चाहिए। अगर यह एक नया रूप है या नहीं

book_form = BookForm() # This will create a new book 

या

book = get_object_or_404(Book, pk=1) 
book_form = BookForm(instance=book) # this will create a form with the data filled of book with id 1 
+1

धन्यवाद एक बहुत तो उस दृश्य में आप की जांच करेंगे, कि मैं क्या जरूरत है! :) – toni

+0

कैसे आप इस html में सूची प्रपत्र ड्रॉप डाउन जगह है, यह सामान्य रूपों के रूप में ही है? –

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