我有一个 HTML 表单来填写患者及其医生的详细信息。我使用外键创建了医生和患者模型之间的一对多关系。
表格(docpatent.html)如下所示:
<form action="{% url 'requestlanding' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<h2>
Patient Details
</h2>
<label for="patientName">
Patient's Name:
</label>
<input type="text" id="patientName" name="patientName" required>
<label for="age">
Age:
</label>
<input type="number" id="age" name="age" required>
<label for="gender">
Gender:
</label>
<select id="gender" name="gender" required>
<option value="male">
Male
</option>
<option value="female">
Female
</option>
<option value="other">
Other
</option>
</select>
<label for="contactNumber">
Contact Number:
</label>
<input type="tel" id="contactNumber" name="contactPatient" required>
<label for="email">
Email:
</label>
<input type="email" id="email" name="emailPatient" required>
<label for="media">
Upload patient's picture:
</label>
<input type="file" id="media" name="wrecommend" accept="image/*,video/*,pdf/*">
<h2>
Doctor Details
</h2>
<label for="doctorName">
Doctor's Name:
</label>
<input type="text" id="doctorName" name="doctorName" required>
<label for="specialization">
Specialization:
</label>
<input type="text" name="specialization" id="specialization" required>
<label for="contactNumber">
Contact Number:
</label>
<input type="tel" id="contactNumber" name="contactDoctor" required>
<p>
(All the information must be correct and proper)
</p>
<button type="submit">
Submit
</button>
</form>
我创建了患者和医生模型如下:
from django.db import models
from django.core.validators import MinValueValidator, MaxValueValidator
class Doctor(models.Model):
name = models.CharField(max_length=50, blank=False)
phone = models.IntegerField(
validators=[MinValueValidator(1000000000), MaxValueValidator(9999999999)],
blank=False,
)
specialization = models.CharField(max_length=50, blank=False, null=True)
def __str__(self):
return self.name
class Patient(models.Model):
GENDER = (("Male", "Male"), ("Female", "Female"), ("Others", "Others"))
name = models.CharField(max_length=50, blank=False, default=None)
email = models.EmailField(max_length=50, blank=False, default=None)
phone = models.IntegerField(
validators=[MinValueValidator(1000000000), MaxValueValidator(9999999999)],
blank=False,
default=None,
)
age = models.PositiveIntegerField(blank=False, null=True, default=0)
gender = models.CharField(max_length=6, choices=GENDER, blank=False, default=None)
doctor = models.ForeignKey(Doctor, on_delete=models.PROTECT)
wrecommend = models.FileField(
upload_to="wrecommend", max_length=50, blank=False, null=True
)
def __str__(self):
return self.name
这是我创建的视图:
def requestlanding(request):
if request.method == "POST":
p_name = request.POST.get("patientName")
p_age = request.POST.get("age")
p_gender = request.POST.get("gender")
p_phone = request.POST.get("contactPatient")
p_email = request.POST.get("emailPatient")
p_wrecommend = request.POST.get("wrecommend")
d_name = request.POST.get("doctorName")
d_phone = request.POST.get("contactDoctor")
d_specialization = request.POST.get("specialization")
doctor = Doctor.objects.create(
name=d_name, phone=d_phone, specialization=d_specialization
)
doctor.save()
patient = Patient.objects.create(
doctor=doctor,
name=p_name,
email=p_email,
phone=p_phone,
age=p_age,
gender=p_gender,
wrecommend=p_wrecommend,
)
patient.save()
return redirect("requestlanding")
return render(request, "docpatient.html")
**我认为这满足了医患关系,即一对多关系,但是在添加同一医生的两名患者时,数据库表中的医生详细信息被重复。但医生记录里应该加上病人的名字。
我想在医生记录上注明该医生的患者姓名。**
请帮我解决这个问题。
当然,每次视图处理成功时,你的代码都会创建一个医生和病人,你需要做的是在创建对象之前检查医生是否存在,这可以通过 Django 来完成 get_or_create
doctor = Doctor.objects.get_or_create(name=d_name, phone=d_phone, specialization=d_specialization)
#doctor.save()