2011-02-28 119 views
1

數據一個Django的ModelForm我有兩個模型店和城市:初始化從URL

class City(models.Model): 
    name = models.CharField() 
    slug = models.SlugField() 


class Store(models.Model): 
    name = models.CharField() 
    slug = models.SlugField() 
    city = models.ForeignKey(City) 

如果我有我添加商店網址設計爲

R 2'mysite.com /城市/( ?[ - \ w] +)/ venue/add $'

其中代表City.slug字段可以初始化一個StoreForm,它自動從url數據填充Store.city字段?

+0

回答更新... – FallenAngel 2011-03-01 08:15:31

回答

0

在您的模板中,定義您的鏈接如下。

{%url somename relevant_slug_text%} 

或者:

href='/mysite.com/city/{{slug_text}}/venue/add' 

在您的網址的conf,定義網址,如:

url(r^'mysite.com/city/(?P<slug_text>\w+)/venue/add$', 'func_name', name='somename') 

所以,你可以relelvant_slug_text變量的值傳遞給你的網址爲slug_text,和在您的功能定義:

def func_name(request, slug_text): 
使用的ModelForm

克里特島的城市評選形式:210

所以,你可以將文本值傳遞與slug_text參數你funcrtion ...

編輯: 有拖的方式...

一個。 ..,然後在礦井第二步,用發佈的數據來填充表單又像:

form = StoreForm(request.POST) 

,那麼你可以渲染這個表單模板......

但如果它是不可能O使用該喲天亞社執行下列操作...

由於您使用的ModelForm創建表單:

class StoreForm(forms.ModelForm): 
    # your form field definitions are here 

IM的功能,只是覆蓋城市場,但在這一點上,因爲你使用modelform,你的表單將被創建爲

<select> 
    <option value="id of record">"unicode value of record"</option> 

所以,你有記錄ID作爲選項值。你有slug_field值來初始化你的領域。所以,你必須獲得相關的城市使用它...

my_city = City.objects.get(slug=<your_slug_value>) 

現在,您可以覆蓋的形式,但你通過表單之前變量呈現給您的模板,您必須做...

StoreForm.base_fields['city'] = forms.ModelChoiceField(queryset=City.objects.all(), initial=my_city) 
form = StoreForm() 
+0

如何將變量放入實際的StoreForm實例中?我可以使用通過url數據填充的城市字段來初始化StoreForm模型,然後從html表單獲取剩餘的信息嗎? – thesteve 2011-02-28 23:20:29

+0

謝謝,我得到它的工作。 – thesteve 2011-03-01 10:21:52