2013-12-16 24 views
0

我结束了使用get_initial,因为它是在这里提到How to subclass django's generic CreateView with initial data?CBV如何从模型设置初始表单数据?

所以,我的看法改变了,看起来像这样:

class VlanFormView(FormView): 
    template_name = 'vlan_form.html' 
    model = Vlan 
    form_class = VlanForm 

    def get_initial(self): 
     initial = {} 
     default_vlan = Vlan.objects.get(pk=1) 
     initial['vlan_name'] = default_vlan.vlan_name 
     initial['vlan_number'] = default_vlan.vlan_number 
     return initial 

    def get_success_url(self): 
     self.group = get_object_or_404(Group, group=self.kwargs['groupname']) 
     # Redirect to vlan list 
     return '/ipmgmt/%s/vlans/' % self.group 

我期待能有一个预先填好的表格基于输入数据的模板。

所以我的模板是基于关闭在VLAN表,该表1第一个条目...

我试图在form_class设置实例:

form_class = VlanForm(instance=Vlan.objects.get(pk=1)) 

我得到一个类型错误:

'VlanForm' object is not callable 

东西告诉我我没有使用CBV权限,我如何设置我的初始数据? 感谢

我的模型:

class Vlan(models.Model): 
    vlan_name = models.CharField(max_length=30) 
    vlan_number = models.CharField(max_length=6) 
    group = models.ForeignKey(Group) 

我的表格:

class VlanForm(forms.ModelForm): 
    class Meta: 
     model = Vlan 

笔者认为:

class VlanFormView(FormView): 
    template_name = 'vlan_form.html' 
    model = Vlan 
    form_class = VlanForm(instance=Vlan.objects.get(pk=1)) 

    def get_success_url(self): 
     self.group = get_object_or_404(Group, group=self.kwargs['groupname']) 
     # Redirect to vlan list 
     return '/ipmgmt/%s/vlans/' % self.group 

回答

1

您可以实现您的视图的方法get_form_kwargs,例如:

class YourView(FormView): 
    #[...] 
    def get_form_kwargs(self): 
     kwargs = super(YourView, self).get_form_kwargs() 
     kwargs['instance'] = Vlan.objects.get(pk=1) 
     return kwargs 

或者你可以使用一个UpdateView和实施get_object ...

编辑:我想我误解你的问题,你要预先填写表格;所以传递instance=不会做你想做的事,因为它也会保存到那个对象。要使用另一个对象作为模板,您可以实现get_initial方法并将对象的字段返回为dict

相关问题