Python Django CreateView基于url参数自定义表单默认字段
文件:Capacity/models.pyPython Django CreateView基于url参数自定义表单默认字段,python,django,django-forms,create-view,Python,Django,Django Forms,Create View,文件:Capacity/models.py class Env(models.Model): name = models.CharField(max_length=50) def get_absolute_url(self): return reverse('index') class Envhosts(models.Model): env = models.ForeignKey(Env) hostname = models.CharF
class Env(models.Model):
name = models.CharField(max_length=50)
def get_absolute_url(self):
return reverse('index')
class Envhosts(models.Model):
env = models.ForeignKey(Env)
hostname = models.CharField(max_length=50)
count = models.IntegerField()
class Meta:
unique_together = ("env","hostname")
def get_absolute_url(self):
return reverse('index')
文件:Capacity/views.py
class EnvhostsCreate(CreateView):
model = Capacity.models.Envhosts
fields=['env','hostname','count']
template_name_suffix = '_create_form'
文件容量/url.py:
urlpatterns = patterns(........ url(r'^createhosts/(?P<envid>\d+)/$',EnvhostsCreate.as_view(),name='envhosts_create'))
urlpatterns=patterns(……url(r'^createhosts/(?P\d+/$),envostscreate.as_view(),name='envosts_create'))
那么现在,,
当我打开此表单时:
/Capacity/createhosts/3/
(其中3是我的环境id)
它根据环境对象的数量以下拉列表的形式显示环境对象的选项。但我希望它根据env id(本例中为“3”)自行获取env
我知道我必须重写类envostscreate(CreateView)中的某些方法。但是,我无法根据
/createhosts/
之后的部分确定使用哪种方法以及如何获取env,您可以使用中描述的模式添加request.user-这是相同的原理。从字段列表中删除env
,然后定义form\u valid()
:
工作完美。必须格式化一个小form.instance.env=env.objects.get(pk=self.kwargs['envid'])(因为它是env类的外键)来设置默认值,但仍由用户决定,这可能是一个不错的选择。
class EnvhostsCreate(CreateView):
model = Capacity.models.Envhosts
fields = ['hostname', 'count']
template_name_suffix = '_create_form'
def form_valid(self, form):
form.instance.env = Envhosts.objects.get(pk=self.kwargs['envid'])
return super(EnvhostsCreate, self).form_valid(form)