如何通过Axios和Vue.js传递数据,在DRF序列化器中为具有多对多字段的模型编写create()函数



我在前端有Vue.js,我使用Axios将用户输入发布到API。

我有一个班级模型和一个学生模型。在Student Model中,我有一个名为classes&quot的字段。作为一个多对多域。用户将能够输入类旁边的所有字段。id的形式(因为I类。Id可以通过$router.params来获取。

我想创建Student实例,并将这个名为class的类实例添加到它的关系Student .classes.add(class)。我应该如何在序列化器类中实现create() ?我试着想出以下方法,但似乎不起作用。
class StudentSerializer(serializers.ModelSerializer):
class Meta:
model = Student
fields = (
"id",
"classes",
"studentID",
"lastName",
"firstName",
"gender",
"dob",
"ssn",
"tel",
"address",
"email",
"userName",
"acctPass",
"note"
)
def create(self, validated_data):
clss = self.request.query_params['class_id']
student = Student.objects.create(**validated_data)
student.classes.add(clss)
student.save()
return student

在AddStudent视图中,我有以下内容:

xport default {
name: 'AddStudent',
data(){
return {
clss:{},
student:{}
}
},
async mounted(){
await this.getClass()
},
methods:{
getClass(){
const classID = this.$route.params.id
axios
.get(`/api/v1/classes/${classID}`)
.then(response => {
this.clss = response.data
})
.catch(error => {
console.log(JSON.stringify(error))
})
},
submitForm(){
const classID = this.$route.params.id
axios
.post("/api/v1/students/", this.student,
{params:
{class_id: classID,
}
}
)
.then(response => {
// redirect
this.$router.push({name:Class, params: { id: classID}})
})
.catch(error => {
console.log(JSON.stringify(error))
})
}
}
}
</script>

我的视图集是这样的:

class StudentViewSet(viewsets.ModelViewSet):
serializer_class = StudentSerializer
queryset = Student.objects.all()
def get_queryset(self):
clssID = self.request.query_params['class_id']
print(clssID)
clss = Class.objects.get(pk=clssID)
return self.queryset.filter(classes=clss)

试试这个:

def create(self, validated_data):
return Student.objects.create(**validated_data)

最新更新