为什么使用axios将带有数据的图像发布到django-rest-framework会出现404错误?

问题描述

我正在使用django-rest-framework并发布数据,但是仅当我向其中添加图片时,它才会出现 404错误。没有图像,数据将被发布,modelviewset会完美运行。

错误屏幕:

Error

我的 urls.py

router = routers.SimpleRouter()
router.register(r'users',UserView,'user')
router.register(r'teachers',TeacherView,'teacher')
router.register(r'students',StudentView,'student')
router.register(r'classes',ClassView,'class')
router.register(r'subjects',SubjectView,'subject')
router.register(r'institutes',InstituteView,'institute')
router.register(r'enrolls',EnrolledView,'enrolled')

router.register(r'quizes',QuizView,'quizes')
router.register(r'questions',QuestionView,'questions')
router.register(r'options',OptionView,'options')
router.register(r'answers',AnswerView,'answers')
router.register(r'attemptedQuestions',AttemptedQuestionView,'attemmptedQuestion')
router.register(r'attemptedQuizes',AttemptedQuizesView,'attemptedQuizes')

urlpatterns = router.urls

我的views.py:

class QuizView(viewsets.ModelViewSet):
    serializer_class = QuizSerializer
    queryset = Quiz.objects.all()


class QuestionView(viewsets.ModelViewSet):
    serializer_class = QuestionSerializer
    queryset = Question.objects.all()


class OptionView(viewsets.ModelViewSet):
    serializer_class = OptionSerializer
    queryset = Option.objects.all()


class AnswerView(viewsets.ModelViewSet):
    serializer_class = AnswerSerializer
    queryset = Answer.objects.all()


class AttemptedQuizesView(viewsets.ModelViewSet):
    serializer_class = AttemptedQuizesSerializer
    queryset = attempted_quizes.objects.all()


class AttemptedQuestionView(viewsets.ModelViewSet):
    serializer_class = AttemptedQuestionSerializer
    queryset = attempted_question.objects.all()

编辑

堆栈跟踪Stack Trace after the error screen

测验模型

class Quiz(models.Model):
    Pin = models.AutoField(primary_key=True)
    Live = models.BooleanField(default=False)
    asset = models.FileField(upload_to='Quiz_assets',default=None,null=True,blank=True)
    Title = models.CharField(max_length=255)
    Description = models.TextField()
    Start_time = models.DateTimeField()
    End_time = models.DateTimeField()
    created = models.DateTimeField(auto_Now_add=True)
    Student = models.ManyToManyField(
        acModels.Student,through='attempted_quizes')
    Subject = models.ForeignKey(
        acModels.Subject,related_name="Quiz",on_delete=models.CASCADE)

此外,在我的本地计算机上一切正常。

解决方法

问题不在于您发布图像。您的网址末尾有/ 1。这意味着Django将尝试获取ID = 1的测验。当您使用PUT方法时,Django将尝试更新ID = 1的测验。如果没有此类ID = 1的测验,则会引发404错误。只需从网址中删除/ 1,然后重新发布即可。对于PUT,请附加DB中实际存在的ID。它将起作用。