2016-07-19 4 views
1

Я работаю с формами (forms.ModelForm), и у меня есть небольшое неудобство при создании моей формы, основанной на моделях. Моя ситуация такая, как следовать в моем models.py файле:forms.ModelForm не сохраняет поля ManyToMany

У меня есть CorporalSegment модель:

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 

У меня есть Movement модель

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 

И у меня есть Metric моделируют

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) 

Моя цель та т в одной форме, я могу сохранить несколько значений (экземпляров) из CorporalSegment, Movement и Metric моделей, и в связи с этим, у меня есть PatientMonitoring модель таким образом:

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 

Мой views.py файл

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') 

forms.py My имеет таким образом:

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'] 

И мой шаблон 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 %} 

Когда я хочу сохранить PatientMonitoring экземпляр в соответствующей форме, corporal_segment (Segmentos Corporales) movement (Movimientos) и metrics поля (Metricas) в форме, их значения не сохраняются в виде (в квадратах красного), но еще поля сохраняются (не красный квадрат)

enter image description here

Такое поведение странно для меня, потому что с помощью Django формы администратора, можно сохранить PatientMonitoring экземпляр со всеми их атрибутами.

Какую вещь я могу игнорировать в момент сохранения в моей форме save метода в моем PatientMonitoringForm в forms.py файла?

ответ

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