Вот как я это решил (Edit: and admin)
Форма:
cats = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple, queryset=Category.objects.all())
(Это была часть набора запросов, которую я не смог найти ..)
Вид:
cats = form.cleaned_data['cats']
game.cats = cats
И это весь код, необходимый для сохранения данных.
Edit:
вот решение для админа
Модель:
from django.contrib import admin
from django.forms import CheckboxSelectMultiple
class MyModelAdmin(admin.ModelAdmin):
formfield_overrides = {
models.ManyToManyField: {'widget': CheckboxSelectMultiple},
}
Администратор:
from gamesite.games.models import Game, MyModelAdmin
admin.site.register(Game, MyModelAdmin)
Это немного странно, но работает!
Если кто-то найдет способ сделать его более «чистым», пожалуйста, пишите!
Ура!