2013-12-16 3 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)) 

я получаю TypeError:

'VlanForm' object is not callable 

Что-то подсказывает мне, что я не пользуюсь правом CBV, как я могу установить свои исходные данные? Благодаря

My Model:

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 ...

Edit: Я думаю, что я неправильно понял ваш вопрос, как вы хотите предварительно заполнить форму; поэтому прохождение instance= не будет делать то, что вы хотите, так как оно также будет сохранено для этого объекта. Для использования другого объекта в качестве шаблона вы можете реализовать метод get_initial и вернуть поля своего объекта как dict

Смежные вопросы