Similar to how I did [here](https://github.com/diox/zamboni/blob/f66afdc96328066ea28843d969644f242453dd5e/mkt/collections/views.py#L82-98): the view-specific logic (converting exceptions to responses, interpreting request data, etc), while the actual logic for doing the duplication happens on the model. Here, I would imagine that `collection.duplicate(**new_data)` creates and returns the new `Collection` instance.