2008-11-07 32 views
7

給定一個Django.db模型類:如何在Django中添加默認(隱藏)值以形成模板?

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

,其中一個希望創建一個新的P與指定的類型,即怎樣才能實現「類型」是默認,隱藏字段(從用戶) ,其中類型是likeso給出:

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

,以便在沒有「類型」字段將出現的形式,但是當P被保存,它的類型都會有標識3(即Type.objects.get(PK = 3))。

其次,在使用通用Django視圖時,如何通過urls.py在url中指定一個「默認」類型(即&)

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

我發現非常難以描述,這可能是問題的一部分。 :)輸入非常感謝!

回答

5

爲了有一個默認的外鍵的模式:

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是很醜陋,佔盡你不應該關心什麼主鍵等於。嘗試通過其他屬性來獲取所需的對象。

Here是你如何把默認在您的網址:

# 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模式指向同一個觀點 - blog.views.page - 但第一圖案不會從URL中捕獲任何內容。如果第一個模式匹配,page()函數將使用其默認參數num,「1」。如果第二個模式匹配,page()將使用正則表達式捕獲的任何num值。

8

小部件django.forms.widgets.HiddenInput將呈現您的字段隱藏。

在大多數情況下,我認爲你會發現任何隱藏的表單值也可以被指定爲url參數。換句話說:

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

和urls.py:

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

我喜歡這個技術自己,因爲我才真正發現自己需要隱藏的表單字段,當我需要跟蹤模型的主鍵實例 - 在這種情況下,「編輯/ pkey」url用於啓動編輯/返回表單以及在保存時接收POST。