[英]Unable to save data into Foreign key fields in Django Rest Framework
我正在做一個項目,我必須讓學生參加一門課程。 我有一個名為 Enrollment 的模型,其中包含兩個指向 Course 和 Student 的外鍵字段。 我試圖在他們提交時將課程和學生保存在注冊模型中。 但是在調用 save 方法之后,響應也會返回響應,因為課程和學生是必需的。
我的模特
class Course(models.Model):
course_name = models.CharField(max_length=300,default=None)
author = models.ForeignKey(TeacherProfile,on_delete=models.CASCADE,null=True,default=None)
course_description = models.TextField(null=True)
course_cover = models.ImageField(null=True,blank=True,upload_to='course_covers/')
def __str__(self):
return self.course_name```
class Enrollment(models.Model):
enroll_key = models.CharField(max_length=100,default="Text here",null=True)
course = models.ForeignKey(Course,on_delete=models.CASCADE,null=True)
student = models.ForeignKey(StudentProfile,on_delete=models.CASCADE,null=True)
def __str__(self):
return self.course.course_name
class Meta:
unique_together = [['course','student']]
序列化器
class CourseEnrollSerializer(serializers.ModelSerializer):
class Meta:
model = Enrollment
fields = ['enroll_key','course','student']
我的觀點
@api_view(['POST'])
@permission_classes([IsAuthenticated])
def EnrollCourse(request,pk):
course = Course.objects.get(id=pk)
print("course",course)
student = StudentProfile.objects.get(user=request.user)
print("student",student)
serializer = CourseEnrollSerializer(data=request.data)
print(serializer)
print("loading the serializer...")
if serializer.is_valid():
serializer.save(course=course,student=student)
else:
print("Serializer not valid",serializer.errors)
return Response(serializer.errors)
urls.py
path('enrollcourse/<int:pk>/',views.EnrollCourse,name='enroll_course'),
#pk is course primarykey
What I get after printing serializer.errors
{'course': [ErrorDetail(string='This field is required.', code='required')], 'student': [ErrorDetail(string='This field is required.', code='required')]}
所以您正嘗試使用相同的用戶和課程保存注冊,這就是您收到此錯誤的原因。
請求數據
確保您在此提供數據,然后在保存數據時設置學生和課程。 在serializer.save()之前,您的序列化程序無效,因為 request.data 中沒有數據或無效數據。 我已經通過在 POST 方法中提供課程和學生來檢查它並且它工作正常。
建議:POST 課程,學生請求,因為它們是必填字段,只需執行 request.save()。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.