如何将多个表单(在单个模板/网页中)中的用户输入数据保存到django中的sqlite数据库中



我对django和我的第一个项目非常陌生。我有多个ModelForms要显示在一个带有一个提交按钮的网页中,我希望所有用户输入数据都存储在数据库中。如果有1个以上的表单,则forms.save((似乎不起作用。我该如何为此撰写观点?

Models.py-
from django.db import models
class PatientBasicInfo(models.Model):
first_name = models.CharField(max_length=200,) # help_text='Enter your Firstname')
last_name = models.CharField(max_length=200,) # help_text='Enter your Lastname')
GENDER_CHOICES = (('M', 'Male'), ('F', 'Female'),)
gender = models.CharField(max_length=6, choices=GENDER_CHOICES, default=False)
date_of_birth = models.DateField('DOB', null=True, blank=False)
height = models.FloatField(null=True)
weight = models.FloatField(null=True)
bmi = models.DecimalField(max_digits=10, decimal_places=6, null=True)
ETHNICITY_CHOICES = (('indian', 'INDIAN'), ('asian', 'ASIAN'), ('american', 'AMERICAN'), ('others', 'OTHERS'),)
ethnicity = models.CharField(max_length=15, choices=ETHNICITY_CHOICES,default=False, blank=False)
def __str__(self):
return self.first_name + " " + self.last_name
class MedicalConditions(PatientBasicInfo):
DIABETES_CHOICES = (('I', 'Type1'), ('II', 'Type2'),)
diabetes_type = models.CharField(max_length=2, choices=DIABETES_CHOICES, default=False)
CONDITIONS_CHOICES = (('hBP', 'HYPERTENSION'),
('LBP', 'HYPOTENSION'),
('heart', 'HEARTDISEASE'),
('kidney', 'KIDNEYDISEASE'),
('liver', 'LIVERDISEASE'),
('cancer', 'CANCER'),
('pcod', 'PCOD'),
('pcos', 'PCOS'),
('thyroid', 'THYROID'),)
conditions = models.BooleanField('Medical Conditions', max_length=20, choices=CONDITIONS_CHOICES, null=True, blank=True, default=False)
medications = models.TextField(help_text='Please list the medications you currently take', blank=True)
forms.py:
import datetime
from django import forms
from django.forms import ModelForm
from .models import PatientBasicInfo, MedicalConditions 
from django.core.exceptions import ValidationError
from django.utils.translation import ugettext_lazy as _

class PatientBasicInfoForm(ModelForm):
#required_css_class = 'required'
def clean_date_of_birth(self):
data = self.cleaned_data['date_of_birth']
if data > datetime.date.today():
raise ValidationError(_('Invalid date'))
return data
class Meta:
model = PatientBasicInfo
fields = ['first_name', 'last_name', 'gender', 'date_of_birth', 'height', 'weight', 'ethnicity']
widgets = {
'gender': forms.RadioSelect, 'ethnicity': forms.Select,
}

class MedicalConditionsForm(ModelForm):
class Meta:
model = MedicalConditions
fields = ['diabetes_type', 'conditions', 'medications']
widgets = {
'diabetes_type': forms.RadioSelect, 'conditions': forms.CheckboxSelectMultiple,
}

views.py:

from django.shortcuts import render
from django.http import HttpResponse
from .models import PatientBasicInfo, MedicalConditions, 
from .forms import PatientBasicInfoForm, MedicalConditionsForm
def index(request):
form1 = PatientBasicInfoForm(request.POST or None)
if form1.is_valid():
form1.save()
form2 = MedicalConditionsForm(request.POST or None)
if form2.is_valid():
form2.save()
context = {'form1': form1, 'form2': form2}
return render(request, 'EDApp/Testing.html', context)

def home(request):
return render(request, 'EDApp/home.html')

testing.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>TestED</title>
</head>
<body>
<form action="{% url 'home' %}" method="POST">
{% csrf_token %}
{{ form1.as_p }}
{{ form2.as_p }}
<input type="Submit" name="submit" value="Submit"/>
</form>
</body>
</html>

这起作用了-

def index(request):
form1 = PatientBasicInfoForm()
form2 = MedicalConditionsForm()
if request.method == 'POST':
form1 = PatientBasicInfoForm(request.POST)
form2 = MedicalConditionsForm(request.POST)
if form1.is_valid() and form2.is_valid():
form1.save(commit=True)
form2.save(commit=True)
context = {'form1': form1, 'form2': form2}
return render(request, 'EDApp/Testing.html', context)

最新更新