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