如何更改多种ModelForm上的小部件

时间:2010-11-27 17:32:49

标签: django django-models django-forms

我有Book和一个与另一个模型有很多关系的类别模型

class Category(models.Model):
   name = models.CharField(max_length = 255)

class Book(models.Model):
   name = models.CharField(max_length = 255)
   categories = models.ManyToManyField(Category, through='book.BookCategory')

class BookCategory(models.Model):
   business = models.ForeignKey(Business)
   category = models.ForeignKey(Category)
   user = models.ForeignKey(User)
   created = models.DateField()

然后我的表格看起来像这样:

class BookForm(forms.ModelForm):
    name = forms.CharField(max_length = 255)
    categories = forms.ModelMultipleChoiceField(
        widget=forms.CheckboxSelectMultiple,
        queryset =  Category.objects.all()
    )

    class Meta:
        model = Business
        fields = ('name', 'categories')

当我尝试保存表单的实例时 book_form = BookForm(request.POST,instance = business) book_form.save()

我收到此错误: 无法在指定中间模型的ManyToManyField上设置值。请改用book.BookCategory的管理器。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

由于BookCategory中没有任何额外字段,您可以删除模型和through='BookCategory'参数。然后将创建一个隐式模型,您应该能够使用该小部件。