2016-07-19 28 views
1

Ich arbeite mit Formularen (forms.ModelForm) und ich habe einige kleine unbequem, wenn ich mein Formular in den Modellen erstellt. Meine Situation wie in meiner models.py Datei folgen:forms.ModelForm speichert nicht ManyToMany Felder

Ich habe das CorporalSegment Modell:

class CorporalSegment(models.Model): 
    SEGMENTO_HOMBRO = 'Hombro' 
    SEGMENTO_CODO = 'Codo' 
    SEGMENTO_ANTEBRAZO = 'Antebrazo' 
    SEGMENTO_MANO = 'Mano' 

    SEGMENT_CHOICES = (
     (SEGMENTO_HOMBRO, u'Hombro'), 
     (SEGMENTO_CODO, u'Codo'), 
     (SEGMENTO_ANTEBRAZO, u'Antebrazo'), 
     (SEGMENTO_MANO, u'Mano'), 
    ) 

    corporal_segment = models.CharField(
     max_length=12, 
     choices=SEGMENT_CHOICES, 
     blank=False, 
    ) 

    class Meta: 
     verbose_name_plural = 'Segmentos Corporales' 

    def __str__(self): 
     return "%s" % self.corporal_segment 

Ich habe das Movement Modell

class Movements(models.Model): 
    name = models.CharField(
     max_length=255, 
     verbose_name='Movimiento' 
    ) 
    class Meta: 
     verbose_name_plural = 'Movimientos' 

    def __str__(self): 
     return "%s" % self.name 

und ich habe das Metric Modell

class Metrics(models.Model): 
    name = models.CharField(
     max_length=255, 
     blank=True, 
     verbose_name='Nombre' 
    ) 
    value = models.DecimalField(
     max_digits = 5, 
     decimal_places = 3, 
     verbose_name = 'Valor', 
     null = True, 
     blank = True 
    ) 

    class Meta: 
     verbose_name = 'Métrica' 

    def __str__(self): 
     return "{},{}".format(self.name, self.value) 

Mein Zweck ist tha t in einer Form kann ich mehrere Werte (Instanzen) von CorporalSegment, Movement und Metric Modelle, und aufgrund dieser sparen, ich habe die PatientMonitoring Modell dieser Art und Weise:

class PatientMonitoring(models.Model): 

    patient = models.ForeignKey(...) 
    medical = models.ForeignKey(...) 

    # My fields pointing to my previous models with many to many relationship 
    corporal_segment = models.ManyToManyField(CorporalSegment, verbose_name='Segmentos Corporales') 
    movement = models.ManyToManyField(Movements, verbose_name='Movimientos') 
    metrics = models.ManyToManyField(Metrics, verbose_name='Métricas',) 

    class Meta: 
     verbose_name = 'Monitoreo del paciente' 

    def __str__(self): 
     return "%s" % self.patient 

Meine views.py Datei

class PatientMonitoringCreate(CreateView): 
    model = PatientMonitoring 
    form_class = PatientMonitoringForm 
    success_url = reverse_lazy('patientmonitoring:list') 

class PatientMonitoringUpdate(UpdateView): 
    model = PatientMonitoring 
    form_class = PatientMonitoringForm 
    success_url = reverse_lazy('patientmonitoring:list') 

Mein forms.py ist dieser Weg:

from django import forms 

from .models import PatientMonitoring 

from crispy_forms.helper import FormHelper 
from crispy_forms.layout import Submit 

class PatientMonitoringForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(PatientMonitoringForm, self).__init__(*args, **kwargs) 
     self.helper = FormHelper() 
     self.helper.add_input(Submit('submit', u'Save')) 

    # I think so that here is my problem ... 
    def save(self, commit=True): 
     patient_monitoring = super(PatientMonitoringForm, self).save(commit=False) 
     patient = self.cleaned_data['patient'] 

     if commit: 
      patient_monitoring.save() 
     return patient_monitoring 

    class Meta: 
     model = PatientMonitoring 
     fields = ['patient', 'medical','corporal_segment','movement','metrics'] 

Und ich meine Vorlage patientmonitoring_form.html s:

{% extends 'base.html' %} 
{% load crispy_forms_tags %} 
{% block title %}Crear Registro de Monitoreo de Paciente{% endblock %} 
{% block content %} 

<div> 
    {% crispy form %} 
    {% csrf_token %} 

</div> 
{% endblock %} 

Wenn ich eine PatientMonitoring Instanz in ihrer jeweiligen Form speichern möchten, die corporal_segment (Segmentos Corp) movement (Movimientos) und metrics (Metricas) Felder in der Form, ihre Werte werden nicht in Form gespeichert (in Quadraten rot), aber der anderen Felder gespeichert werden (nicht rot squared)

enter image description here

Dieses Verhalten ist für mich seltsam, denn über Form Django admin, möglich ist, mit all ihren Attributen eine PatientMonitoring Instanz speichern.

Welche Sache kann ich in meiner Form save Methode in meinem PatientMonitoringForm in forms.py Datei speichern von im Moment ignoriert werden?

Antwort