Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django CreateView基于url参数自定义表单默认字段_Python_Django_Django Forms_Create View - Fatal编程技术网

Python Django CreateView基于url参数自定义表单默认字段

Python 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

文件: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.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)