2017-12-13 1 views
0

Ich benutze Django 1.11. Ich versuche, einem verborgenen Feld in einem Inline-Formularsatz einen Wert hinzuzufügen. Ich habe versucht, den versteckten Feldwert an verschiedenen Punkten von def get_context_data und def form_valid erfolglos einzufügen. Der Code, den ich verwende, ist wie folgt:Django fügen Wert zu versteckten Feld Inline-Formularsatz

views.py

@method_decorator(login_required, name='dispatch') 
class DocumentCreate(CreateView): 
    model = DocumentClient 
    success_url = reverse_lazy('documents') 
    form_class = DocumentForm 

    def get_context_data(self, **kwargs): 
     data = super(DocumentCreate, self).get_context_data(**kwargs) 
     if self.request.POST: 
      data['docform'] = DocumentFormSet(self.request.POST, self.request.FILES) 
     else: 
      data['docform'] = DocumentFormSet() 
     return data 

    def form_valid(self, form): 
     context = self.get_context_data() 
     docform = context['docform'] 
     if docform.is_valid(): 
      self.object = form.save() 
      docform.instance = self.object 
      docform.save() 
      return HttpResponseRedirect('documents') 
     else: 
      return self.render_to_response(self.get_context_data(form=form)) 

forms.py

class DocumentForm(ModelForm): 
    class Meta: 
     model = DocumentClient 
     exclude =() 
     widgets = { 
      'cnum': HiddenInput(), 
     } 

    def __init__(self, *args, **kwargs): 
     super(DocumentForm, self).__init__(*args, **kwargs) 
     for field in self.fields: 
      self.fields['cnum'].required = False 


class DocumentDetailForm(ModelForm): 
    class Meta: 
     model = DocumentDetail 
     exclude =() 
     widgets = { 
      'document_date': DateInput(), 
        } 

    def __init__(self, *args, **kwargs): 
     super(DocumentDetailForm, self).__init__(*args, **kwargs) 
     self.fields['document_description'].required = False 

DocumentFormSet = inlineformset_factory(DocumentClient, DocumentDetail, form=DocumentDetailForm, extra=10, can_delete=False) 

Das versteckte Feld 'cnum' ist das, was ich versuche, einen Wert einzufügen, für die Aufnahme in das Model. Kann jemand eine Anleitung geben, wie man das erreichen kann? Jede Hilfe wird dankbar geschätzt!

Antwort

1

In DocumentCreate, haben Sie das versucht?

class DocumentCreate(CreateView): 
    def get_initial(self): 
     # Get initial value from kwargs (If needed) and save as instance variable. 
     self.cnum_val = self.kwargs.get('cnum_value') 

    def form_valid(self, form): 
     # Insert your desired value to cnum (or you can simply forget get_initial and supply whatever value here) 
     form.instance.cnum = self.cnum_val 
     self.object = form.save() 
     ... 
     self.render_to_response(self.get_context_data(form=form)) 

form.instance bezieht sich auf das nicht gespeicherten Objektmodell von der Form verwendet

Siehe auch here.

+0

Brilliant danke! Ich habe deine def form_valid (self, form): Methode benutzt. – cr1

Verwandte Themen