使用来自url的数据初始化django模型

时间:2011-02-28 10:21:46

标签: django-forms

我有两种商店和城市模型:

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] +)/地点/添加$'

其中代表City.slug字段我可以初始化一个StoreForm,它会自动从url数据填充Store.city字段吗?

1 个答案:

答案 0 :(得分:0)

在模板中,按如下方式定义链接​​。

{%url somename relevant_slug_text%}

或者:

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

在您的网址中,定义您的网址:

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

所以,你可以将relelvant_slug_text变量的值传递给你的url作为slug_text,并在你的函数定义中:

def func_name(request, slug_text):

因此,您可以使用slug_text参数将文本值传递给您的函数...

编辑: 有两种方式......

一:

使用ModelForm克隆您的城市选择表单,然后在第二步中,使用发布的数据再次填充您的表单,如:

form = StoreForm(request.POST)

然后您可以将此表单呈现给您的模板......

但是如果不可能使用它,你可以做以下事情......

由于您使用的是ModelForm来创建表单:

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

我的功能,只是覆盖城市字段,但此时,因为你使用了modelform,你的表单thml将被创建为

<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()