Как сохранить внешний ключ в таблице и получить заполненные данные в Django rest framework?
Я пытаюсь сохранить id советника в поле advisor_id в таблице Booking, но оно сохраняет нулевое значение в таблице booking, когда я использую advisor = AdvisorSerializer(read_only=True)
, которое я использую для заполнения данных из модели Advisor Model
serializer.py
from django.db import models
from django.db.models import fields
from rest_framework import serializers
from .models import Advisor, Booking
class AdvisorSerializer(serializers.ModelSerializer):
class Meta:
model = Advisor
fields = '__all__'
class BookingSerializer(serializers.ModelSerializer):
advisor = AdvisorSerializer(read_only=True)
class Meta:
model = Booking
fields = '__all__'
models.py
from django.db import models
from users.models import User
# Create your models here.
class Advisor(models.Model):
name=models.CharField(max_length=255)
photo=models.URLField()
class Booking(models.Model):
user=models.ForeignKey(User, related_name='users', blank=True, null=True, on_delete=models.CASCADE)
advisor=models.ForeignKey(Advisor, related_name='advisors', blank=True, null=True, on_delete=models.CASCADE)
booking_time=models.DateField()
views.py - пост-метод для хранения данных в таблице бронирования
class bookAdvisorMeetingDate(APIView):
def post(self, request, user_id, advisor_id):
token = request.COOKIES.get('jwt')
if not token:
return Response({"success": False, "message": "UnAuthorized"}, status=status.HTTP_401_UNAUTHORIZED)
try:
payload = jwt.decode(token, 'secret', alogrithm=['HS256'])
except jwt.ExpiredSignatureError:
return Response({"success": False, "message": "UnAuthorized"}, status=status.HTTP_401_UNAUTHORIZED)
if not str(payload['id']) == user_id:
return Response({"success": False, "message": "UnAuthorized | You have no access to this route"}, status=status.HTTP_401_UNAUTHORIZED)
# print(user_id, advisor_id)
user = User.objects.filter(id=user_id).first()
advisor = Advisor.objects.filter(id=advisor_id).first()
print('user adn advisor', user.id, advisor.id)
data = {**request.data, 'user': user_id, 'advisor': advisor_id}
serializer = BookingSerializer(data=data)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response({"success": True}, status=status.HTTP_200_OK)