2011-02-28 66 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