2008-11-07 4 views
7

एक Django.db मॉडल वर्ग को देखते हुए:Django में टेम्पलेट्स बनाने के लिए कोई डिफ़ॉल्ट (छुपा) मान कैसे जोड़ता है?

class P(models.Model): 
    type = models.ForeignKey(Type) # Type is another models.Model class 
    name = models.CharField() 

जहां एक एक निर्दिष्ट प्रकार का एक नया पी बनाने के लिए चाहता है, यानी कैसे एक बनाने के "प्रकार" एक डिफ़ॉल्ट, छिपी हुई फ़ील्ड (उपयोगकर्ता से) होने के लिए है प्रपत्र नहीं "प्रकार" क्षेत्र में भी दिखाई देंगी

http://x.y/P/new?type=3 

ताकि, लेकिन जब पी सहेजा जाता है, उसके प्रकार आईडी 3 (यानी Type.objects.get (पी = होगा:, जहां प्रकार likeso दिया जाता है 3))।

दूसरा, कैसे एक (यह संभव है) यूआरएल में एक "डिफ़ॉल्ट" प्रकार निर्दिष्ट करें, urls.py के माध्यम से, जेनेरिक Django विचारों का उपयोग करते समय, जैसे।

urlpatterns = ('django.generic.views.create_update', 
    url(r'^/new$', 'create_object', { 'model': P }, name='new_P'), 
) 

मुझे पता चला कि वर्णन करने में बहुत मुश्किल है, जो समस्या का हिस्सा हो सकता है। :) इनपुट बहुत सराहना की है! आदर्श आप परवाह नहीं करना चाहिए के रूप में क्या प्राथमिक कुंजी के बराबर है

mydefault = Type.objects.get(pk=3) 

class P(models.Model): 
    type = models.ForeignKey(Type, default=mydefault) # Type is another models.Model class 
    name = models.CharField() 

ध्यान दें कि pk=x का उपयोग कर बहुत बदसूरत है,:

उत्तर

5

एक मॉडल में एक डिफ़ॉल्ट विदेशी कुंजी है करने के लिए। किसी अन्य विशेषता द्वारा इच्छित वस्तु को प्राप्त करने का प्रयास करें।

Here की कैसे आप अपने यूआरएल में चूक कर दिया: - blog.views.page - लेकिन पहले पैटर्न

# URLconf 
urlpatterns = patterns('', 
    (r'^blog/$', 'blog.views.page'), 
    (r'^blog/page(?P<num>\d+)/$', 'blog.views.page'), 
) 

# View (in blog/views.py) 
def page(request, num="1"): 
    # Output the appropriate page of blog entries, according to num. 

उपरोक्त उदाहरण में, दोनों URL प्रतिमानों को एक ही दृश्य को इंगित यूआरएल से कुछ भी कैप्चर नहीं करता है। यदि पहला पैटर्न मेल खाता है, तो पृष्ठ() फ़ंक्शन num, "1" के लिए इसके डिफ़ॉल्ट तर्क का उपयोग करेगा। यदि दूसरा पैटर्न मिलान होता है, तो पेज() रेगेक्स द्वारा जो भी num value कैप्चर किया गया था उसका उपयोग करेगा।

8

विजेट django.forms.widgets.HiddenInput आपके क्षेत्र को छुपाएगा।

ज्यादातर मामलों में, मुझे लगता है कि आप पाएंगे कि किसी भी गुप्त फ़ॉर्म मूल्य भी एक यूआरएल पैरामीटर के रूप में के बजाय निर्दिष्ट किया जा सकता है। दूसरे शब्दों में:

<form action="new/{{your_hidden_value}}" method="post"> 
.... 
</form> 

और urls.py में:

^/new/(?P<hidden_value>\w+)/ 

मैं इस तकनीक को अपने आप को पसंद करते हैं, क्योंकि मैं केवल वास्तव में अपने आप को छिपा प्रपत्र फ़ील्ड्स की आवश्यकता होगी, लगता है जब मैं एक मॉडल के प्राथमिक कुंजी ट्रैक करने की जरूरत उदाहरण - जो मामले में एक "संपादित करें/pkey" url दोनों की शुरुआत संपादित करें/फ़ॉर्म पर लौटने, और बचाने पर पोस्ट प्राप्त करने के प्रयोजनों के कार्य करता है।

2

आप यूआरएल में छिपा मूल्य सहित एंड्रयू दृष्टिकोण के साथ जाने के लिए और अभी भी Django के रूप टेम्पलेट्स में बनाया से एक का उपयोग करना चाहते हैं, वहाँ आप छिपी हुई फ़ील्ड को बाहर करने के लिए तरीके हैं।

http://docs.djangoproject.com/en/1.1/topics/forms/modelforms/#using-a-subset-of-fields-on-the-form

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