【发布时间】:2018-01-30 03:51:29
【问题描述】:
我正在做的是django 2项目调用api到django 1项目在Appointment表中预约并将详细信息保存到BookAppt表中。
根据给出的答案之一更新我的代码后,我现在收到此错误。 {"patientId":["This field is required."]} 我不知道为什么,即使我已经包含了它。
请帮忙,因为我已经在这部分卡了 2 天了。
请注意,这是 django 2 调用 django 1。这是我的代码:
-model.py
-- django 1
class Appointments (models.Model):
patientId = models.IntegerField()
clinicId = models.CharField(max_length=10)
date = models.DateField()
time = models.TimeField()
created = models.DateTimeField(auto_now_add=True)
ticketNo = models.IntegerField()
STATUS_CHOICES = (
("Booked", "Booked"),
("Done", "Done"),
("Cancelled", "Cancelled"),
)
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default="Booked")
-- django 2
class MyUser(AbstractUser):
userId = models.AutoField(primary_key=True)
gender = models.CharField(max_length=6, blank=True, null=True)
nric = models.CharField(max_length=9, blank=True, null=True)
birthday = models.DateField(blank=True, null=True)
birthTime = models.TimeField(blank=True, null=True)
class BookAppt(models.Model):
clinicId = models.CharField(max_length=20)
patientId = models.ForeignKey(MyUser, on_delete=models.CASCADE)
scheduleTime = models.DateTimeField()
ticketNo = models.CharField(max_length=5)
status = models.CharField(max_length=20)
- 序列化器
-- django 1
class AppointmentsSerializer(serializers.ModelSerializer):
class Meta:
model = Appointments
fields = ('id', 'patientId', 'clinicId', 'date', 'time', 'created', 'ticketNo', 'status')
-- django 2
class MyUserSerializer(serializers.ModelSerializer):
class Meta:
model = MyUser
fields = ('userId', 'username', 'email', 'first_name', 'last_name', 'gender', 'nric', 'birthday', 'birthTime')
read_only_fields = ('userId',)
class BookApptSerializer(serializers.ModelSerializer):
patientId = MyUserSerializer(many=False)
class Meta:
model = BookAppt
fields = ('id', 'patientId', 'clinicId', 'scheduleTime', 'ticketNo', 'status')
-view.py
-- django 1
class AppointmentsViewSet(viewsets.ModelViewSet):
permission_classes = [AllowAny]
queryset = Appointments.objects.all()
serializer_class = AppointmentsSerializer
-- django 2
@csrf_exempt
def my_django_view(request):
if request.method == 'POST':
r = requests.post('http://127.0.0.1:8000/api/makeapp/', data=request.POST)
else:
r = requests.get('http://127.0.0.1:8000/api/makeapp/', data=request.GET)
if r.status_code == 201 and request.method == 'POST':
data = r.json()
patient = request.data['patientId']
patientId = MyUser.objects.get(id=patient)
saveget_attrs = {
"patientId": patientId,
"clinicId": data["clinicId"],
"scheduleTime": data["created"],
"ticketNo": data["ticketNo"],
"status": data["status"],
}
saving = BookAppt.objects.create(**saveget_attrs)
return HttpResponse(r.text)
elif r.status_code == 200: # GET response
return HttpResponse(r.json())
else:
return HttpResponse(r.text)
class BookApptViewSet(viewsets.ModelViewSet):
permission_classes = [AllowAny]
queryset = BookAppt.objects.all()
serializer_class = BookApptSerializer
-更新 1
序列化器
class BookApptSerializer(serializers.ModelSerializer):
patientId = MyUserSerializer(many=False)
class Meta:
model = BookAppt
fields = ('id', 'patientId', 'clinicId', 'scheduleTime', 'ticketNo', 'status')
错误
'WSGIRequest' object has no attribute 'data'
【问题讨论】:
标签: python django django-rest-framework