Как написать функцию create() в сериализаторе DRF для модели с полем "многие ко многим", передавая данные через axios и vue
У меня есть vue на фронтенде и я использую axios для отправки пользовательского ввода в api. У меня есть модель класса и модель студента. В модели студента у меня есть поле "classes" как поле "многие ко многим". Пользователи смогут вводить все поля, кроме class.id в форме (поскольку class.id можно получить с помощью $router.params). Я хочу создать экземпляр Student и добавить этот экземпляр класса под названием clss к его отношению. student.classes.add(clss). Как я должен реализовать create() в классе serielizer? Я попытался придумать следующее, но, похоже, это не работает.
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 Vue у меня есть следующее:
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)