2017-05-22 2 views
0

J'ai créé un formulaire avec un champ Notes et lorsque l'utilisateur final remplit le champ Notes et envoie des soumissions, j'en ai besoin non seulement pour enregistrer le texte dans ModelOne Notes mais également mettre à jour le champ notes dans ModelTwo & ModelThree avec le même texte.Django Champ de mise à jour de trois modèles portant le même nom via ModelForm Champ

Code actuel:

View.py

class CommandRadioView(FormView): 
template_name = 'Gameflow/command_call_notes.html' 
form_class = CommandCallForm 

def get(self, request, *args, **kwargs): 
    self.mission = get_object_or_404(Mission, pk=kwargs.get('mission_id', None)) 
    kwargs['user_id'] = self.mission.proposal.user.id 
    self.radio = get_object_or_404(CommandPhone, pk=kwargs.get('radio_id', None)) 
    phone_type = CommandPhoneCallType(
     description=' General Comm', 
     phonecall=self.radio 
    ) 
    phone_type.save() 
    self.mission.complete_mission(
     request.user, 
     self.radio.created_at 
    ) 
    return super().get(request, *args, **kwargs) 

def post(self, request, *args, **kwargs): 
    if "save" in request.POST: 
     return super().post(request, *args, **kwargs) 
    else: 
     url = self.get_success_url() 
     return HttpResponseRedirect(url) 

def form_valid(self, form): 
    self.object = form.save(commit=False) 
    self.object.save() 
    return super().form_valid(form) 

Form.py:

class CommandCallForm(forms.ModelForm): 
class Meta: 
    model = Mission 
    fields = ['notes'] 

def __init__(self, *args, **kwargs): 
    super().__init__(*args, **kwargs) 
    self.helper = FormHelper() 
    self.helper.form_id = 'user_form' 
    self.helper.form_class = 'form-horizontal' 
    self.helper.label_class = 'col-lg-3' 
    self.helper.field_class = 'col-lg-8' 

    self.helper.layout = Layout(
     Field(
      'notes', 
     ), 
     FormActions(
      Submit('save', 'Submit'), 
      Button('cancel', 'Cancel', css_class='cancel') 
     ) 
    ) 

Il manque quelque chose que vous devez voir me faire savoir hourras.

+0

Où est votre formulaire? Il n'y a littéralement rien sur la méthode de demande de publication? – zaidfazil

+0

@FazilZaid Code de forme ajouté, Oui, je sais que c'est seulement le temps que je me suis retrouvé à utiliser post et je ne suis pas sûr de la requête nécessaire pour faire plusieurs modèles –

+0

Pourriez-vous s'il vous plaît expliquer ce que vous êtes essayant d'accomplir? Je n'ai pas très bien compris .. – zaidfazil

Répondre

0

D'après ce que vous avez demandé, et ce que je compris, je l'ai modifié votre point de vue,

Comme ça,

class CommandRadioView(FormView): 
    template_name = 'Gameflow/command_call_notes.html' 
    form_class = CommandCallForm    

    def post(self, request, *args, **kwargs): 
     form_class = self.get_form_class() 
     form = self.get_form(form_class) 
     if form.is_valid(): 
      self.mission = get_object_or_404(Mission, pk=kwargs.get('mission_id', None)) 
      kwargs['user_id'] = self.mission.proposal.user.id 
      self.radio = get_object_or_404(CommandPhone, pk=kwargs.get('radio_id', None)) 
      phone_type = CommandPhoneCallType(description=' General Comm', phonecall=self.radio) 
      phone_type.save() 
      self.mission.complete_mission(request.user, self.radio.created_at) 
      return self.form_valid(form) 
     else: 
      return self.form_invalid(form) 

    def form_valid(self, form): 
     self.object = form.save(commit=False) 
     self.object.save() 
     return super().form_valid(form)