python - 如何在 django 的序列化器字段中设置上下文值?
问题描述
我有这些模型
class Patient(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
class Doctor(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
class Visit(models.Model):
patient = models.ForeignKey(
'Patient',
on_delete=models.CASCADE,
)
doctor = models.ForeignKey(
'doctor.Doctor',
on_delete=models.CASCADE,
)
date = models.DateField(auto_now=False, auto_now_add=False)
time = models.TimeField(auto_now=False, auto_now_add=False)
title = models.CharField(max_length=100)
detail = models.TextField()
而这个序列化器:
class VisitSerializer(serializers.ModelSerializer):
class Meta:
model = Visit
fields = '__all__'
我在视图中从 db 中查询了患者和医生,并希望将它们发送到序列化程序:
@api_view(['POST', ])
@permission_classes((IsAuthenticated, ))
def add_visit_view(request, doctor_pk):
try:
patient = Token.objects.get(key=request.auth.key).user
doctor = Doctor.objects.get(pk=doctor_pk)
except Patient.DoesNotExist:
return Response(data={'error': 'patient does not exist.'}, status=status.HTTP_404_NOT_FOUND)
except Doctor.DoesNotExist:
return Response(data={'error': 'doctor does not exist.'}, status=status.HTTP_404_NOT_FOUND)
user = request.user
if patient != user:
return Response({'error': 'user and patient do not match'}, status=status.HTTP_400_BAD_REQUEST)
context = {
'doctor': doctor,
'patient': patient
}
serializer = VisitSerializer(data=request.data, context=context)
data = {}
if serializer.is_valid():
patient = serializer.save()
data['message'] = 'visit added successfully'
else:
data = serializer.errors
return Response(data)
我知道我必须使用上下文字段发送额外的数据,但是如何在序列化程序中设置它们
我覆盖了这样的创建方法:
def create(self, validated_data):
visit = Visit(
patient=self.context['patient'],
doctor=self.context['doctor'],
date=self.validated_data['date'],
time=self.validated_data['time'],
title=self.validated_data['title'],
detail=self.validated_data['detail']
)
visit.save()
return visit
但是当我发送请求时,它说医生和患者字段仍然需要
我该怎么办?
解决方案
推荐阅读
- c# - 获取最新评论的 Sql 查询添加了 3 个表
- postgresql - postgresql.conf 设置被忽略,因为它已失效
- vba - 如何使代码兼容 32 位和 64 位
- utf-8 - 从 Java 11 中的 TIFF 图像中获取 TIFF 标签值(包括非 ASCII 字符)
- php - Laravel 从具有唯一 URL 的 ID 的数据库中获取数据
- html - 如何在步骤进度条上添加图像?
- python-3.x - 在 Flair Sentiment Analysis 中处理表情符号
- reactjs - 刷新后Reactjs保存状态
- java - 该程序检查两个数组是否以某种顺序具有相同的元素
- faunadb - 如何返回 FaunaDB 中的所有非空数据?