Я думаю для сложных типов данных, необходимо расширить их путем определения ToDB () метод, который содержит их собственную реализацию для того, чтобы составить таблицы в DB и этот способ, которым это становится авторекурсивным.
class GameForm(forms.ModelForm):
name = forms.CharField(max_length=15, label='Name')
url = forms.URLField(label='URL', initial='http://')
cats = forms.ModelMultipleChoiceField(
widget=forms.CheckboxSelectMultiple,
required=True)
class Meta:
model = Game
fields = ('name','url','cats')
, который должен исправить ваше представление, но я не уверен насчет администратора. все еще ищу ... отредактирую, если что-нибудь найду.
Вот как я это решил (Edit: и админка)
cats = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple, queryset=Category.objects.all())
(Это была часть набора запросов, которую я не смог найти ..)
cats = form.cleaned_data['cats']
game.cats = cats
И это весь код, необходимый для сохранения данных.
Редактировать: вот решение для админа
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)
Выглядит немного странно, но работает! Если кто-то найдет способ сделать его более «чистым», напишите нам!
Ура!