In my opinion you have to do it in the view by intercepting drag and drop events. The current model API does not expose any functions to determine whether a particular drag is going to be accepted by the model or not. I even posted a bug report on it but it was a couple of years ago and then haven't fixed it (so it probably won't ever get fixed, at least not before Qt 6).