Прямое присвоение прямой стороне множества "многие-ко-многим" запрещено. Вместо этого используйте 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({})
Вернуться на верх