簡體   English   中英

無法將數據保存到 Django Rest Framework 中的外鍵字段中

[英]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')]}

  1. 您遇到的錯誤可能是因為您的模型元中是獨一無二的,我嘗試使用您的代碼並在課程和學生的注冊已經存在時遇到了相同的錯誤。 刪除了用戶的注冊並且它起作用了。

所以您正嘗試使用相同的用戶和課程保存注冊,這就是您收到此錯誤的原因。

  1. 您正在驗證序列化程序

請求數據

確保您在此提供數據,然后在保存數據時設置學生和課程。 serializer.save()之前,您的序列化程序無效,因為 request.data 中沒有數據或無效數據。 我已經通過在 POST 方法中提供課程和學生來檢查它並且它工作正常。

建議:POST 課程,學生請求,因為它們是必填字段,只需執行 request.save()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM