我正在尝试创建一个医院管理系统,其中有两个 ModelForm,一个 ModelForm 创建患者对象,而模型 2 的另一种形式用于承认 Patient,这意味着它使用具有新字段的新表单模板中的患者对象并创建新 ID其中也有模型一id(患者ID)和模型二id(IPD ID),模型二与带有患者ID的模型一链接,一个患者可以有多个Ipd id models.py:
class Patient(models.Model):
name = models.CharField(max_length=200);
phone = models.CharField(max_length=20);
address = models.TextField();
patient_id = models.AutoField(primary_key=True);
gender= models.CharField(choices=GENDER, max_length=10)
consultant = models.CharField(choices=CONSULTANT, max_length=20)
def __str__(self):
return self.name
class Ipd(models.Model):
reason_admission = models.CharField(max_length=200, blank=False)
presenting_complaints = models.CharField(max_length=200,)
ipd_id = models.AutoField(primary_key=True)
rooms = models.ForeignKey(Rooms,on_delete=models.CASCADE, blank=False)
date_of_admission = models.DateField(("Date"),
default=datetime.date.today)
patient = models.ForeignKey(Patient, on_delete=models.CASCADE, blank=False, default = "")
def __str__(self):
return self.patient.name
形式.py:
class PatientForm(forms.ModelForm):
class Meta:
model = Patient
fields = ['name','phone','address','patient_id','consultant','Gender']
class IpdForm(ModelForm):
class Meta:
model = Ipd
fields = ['patient', 'reason_admission', 'presenting_complaints',
'rooms', 'date_of_admission']
def __init__(self, *args, **kwargs):
super(IpdForm, self).__init__(*args, **kwargs)
self.fields['patient']=forms.ModelChoiceField(queryset=Patient.objects.all())
视图.py:
@login_required
def show(request, patient_id):
patient = Patient.objects.filter(pk=patient_id)
return render(request, 'show.html', {'patient': patient})
@login_required
def new(request):
if request.POST:
form = PatientForm(request.POST)
if form.is_valid():
if form.save():
return redirect('/', messages.success(request, 'Patient is successfully created.', 'alert-success'))
else:
return redirect('/', messages.error(request, 'Data is not saved', 'alert-danger'))
else:
return redirect('/', messages.error(request, 'Form is not valid', 'alert-danger'))
else:
form = PatientForm()
return render(request, 'new.html', {'form':form})
@login_required
def edit(request, patient_id):
if request.POST:
patient = Patient.objects.get(pk=patient_id)
form = PatientForm(request.POST, instance=patient)
if form.is_valid():
if form.save():
return redirect('/', messages.success(request, 'Patient is successfully updated.', 'alert-success'))
else:
return redirect('/', messages.error(request, 'Data is not saved', 'alert-danger'))
else:
return redirect('/', messages.error(request, 'Form is not valid', 'alert-danger'))
else:
form = PatientForm(instance=patient)
return render(request, 'edit.html', {'form':form})
@login_required
def ipd(request, patient_id):
object = get_object_or_404(Ipd, patient__patient_id=patient_id)
if request.method == "POST":
formtwo = IpdForm(request.POST)
if formtwo.is_valid():
instance = formtwo.save(commit=False)
instance.save()
else:
return HttpResponse(formtwo.errors)
else:
formtwo = IpdForm()
return render(request, 'newipd.html', {'object': object, 'form2': formtwo})
网址.py:
url(r'^order/ipd/(?P<patient_id>\d+)/$', my_order.ipd, name='ipd'),
html :
{% for field in form2.visible_fields %}
<div class="card-panel">
<span class="blue-text text-darken-2">Name : {{name}}</span> <br>
<span class="blue-text text-darken-2">Phone : {{ phone }}</span><br>
<span class="blue-text text-darken-2">Address : {{ address }}</span>
<br>
<span class="blue-text text-darken-2">Gender : {{ gender }}</span><br>
</div>
{% endfor %}
您需要在 IPD ModelForm 的 init 函数中为患者模型添加模型选择字段,如下所示
def __init__(self, *args, **kwargs):
super(IpdForm, self).__init__(*args, **kwargs)
self.fields['patient']=forms.ModelChoiceField(queryset=Patient.objects.all())
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句