django - CreateView - 如何在下拉列表中显示选定的特定选项

时间:2017-06-21 13:14:41

标签: django django-templates

我的模型如下所示。

class ProductGroup(models.Model):
    name = models.CharField(max_length=30,null=False, blank=False)
    category=TreeForeignKey('category.Category', null=False,blank=False)

我有一个CreateView as

class CreateProductGroup(CreateView):
    model = ProductGroup
    fields = ['name', 'category']

此视图的我的网址格式为

url(r'^create-group/(?P<pk>[0-9]+)/$', views.CreateProductGroup.as_view(), name='create_group'),

我从category_detail.html页面传递category_id到url

<a href="{%url 'create_group' object.id %}">Create product group</a>

这是我的表格

<form method="post">
        {% csrf_token %}
        {% bootstrap_form form %}
        {% buttons %}
            <button type="submit" class="btn btn-primary">
                Submit
            </button>

        {% endbuttons %}
    </form>

现在,如何在表单中选择的URL中显示与id相对应的类别?

1 个答案:

答案 0 :(得分:3)

您可以定义get_initial()方法以返回字典以预填充表单;在该方法中,您可以从self.kwargs获取值。

def get_initial(self):
    return {'category': self.kwargs['pk']}

或者,如果URL中始终提供类别ID,您可能根本不希望类别字段显示在表单上;在这种情况下,将其从字段列表中排除,并覆盖form_valid方法以将其设置为保存。

def form_valid(self, form):
    form.instance.category_id = self.kwargs['pk']
    return super(CreateProductGroup, self).form_valid(form)