我有两种商店和城市模型:
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字段吗?
答案 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()