What i am doing is django 2 project call api to django 1 project to book an appointment in Appointment
table and save the details into BookAppt
table.
I am trying to save the data from api call to an api using view. Everything else works but however, the foreign key to user model userId
give me this error : ValueError: Cannot assign "4": "BookAppt.patientId" must be a "MyUser" instance.
I don't know what is the problem as i did say same post with the same value to that BookAppt table API and it works normally. But when saving using the API call, it gave me this error.
Updated error
After updating my code based on the answer given, i got this error now. {"patientId":["This field is required."]}
Still have no idea why even though i specify it already.
Please help as i have been stuck at this part for 2 days now.
Here is my code:
Updated code, do note that it is django 2 calling to 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)
serializer
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