Прямое присвоение прямой стороне множества "многие-ко-многим" запрещено. Вместо этого используйте exercise.set()
У меня есть две модели, Exercise и Workouts. Я хочу создать тренировку с набором упражнений. Я уже смог отправить массив упражнений и детали тренировки с помощью POST и ajax, но я продолжаю получать эту ошибку. Я прочитал все другие вопросы с этой ошибкой, но моя проблема заключается в двух вещах: 1 - элемент упражнения уже создан, 2 - я хочу добавить более одного элемента упражнения в таблицу тренировок. Есть идеи, как это сделать?
models.py:
forms.py:
class WorkoutForm(forms.ModelForm):
class Meta:
model = Workout
fields = ( 'name', 'exercises', 'description', 'goals', 'workout_time', 'difficulty')
javascript
create_workout.addEventListener('click', e=>{
//workout details
const workout_form = document.getElementById('workout_form')
const csrftoken = document.querySelector('[name=csrfmiddlewaretoken]').value;
const exercises = workoutExercise
const name = document.getElementById('id_name').value
const description = document.getElementById('id_description').value
const goals = document.getElementById('id_goals').value
const time = document.getElementById('id_workout_time').value
const difficulty = document.getElementById('id_difficulty').value
//console.log(exercises)
create_workout_function(csrftoken, name, description, goals, time, difficulty, workoutExercise)
})
}
function create_workout_function(csrftoken, name, description, goals, time, difficulty, exercises){
$.ajax({
type: "POST",
url: 'workout/create/',
enctype: 'multipart/form-data',
datatype: 'json',
data: {
csrfmiddlewaretoken: csrftoken,
name: name,
description: description,
goals: goals,
workout_time: time,
difficulty: difficulty,
exercises: exercises,
},
success: (response)=>{
console.log(response)
},
error: (error)=>{
console.log(error)
}
})
//console.log(csrftoken, name, description, goals, time, difficulty, exercises)
}
Views.py
def create_workout(request):
if request.is_ajax() and request.method == 'POST':
# print(request.POST)
name = request.POST.get('name')
description = request.POST.get('description')
goals = request.POST.get('goals')
workout_time= request.POST.get('workout_time')
difficulty = request.POST.get('difficulty')
ex = Exercise.objects.get(Exercise=request.POST.get('exercise'))
exercises = Exercise.objects.get(id=ex.id)
Workout.objects.update_or_create(
name = name,
exercises = exercises,
description = description,
goals = goals,
workout_time = workout_time,
difficulty = difficulty
)
data={
'msg': 'created'
}
return JsonResponse({'data': data})
else:
return JsonResponse({})