【问题标题】:How do I change the widget on a manytomany ModelForm如何更改多对多 ModelForm 上的小部件
【发布时间】:2010-11-27 17:32:49
【问题描述】:

我有 Book 和 Category 模型,通过另一个模型具有多对多关系

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 的管理器。

我将如何解决这个问题?

【问题讨论】:

    标签: django django-models django-forms


    【解决方案1】:

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

    【讨论】:

    • 我删除了一堆东西以使其更精简,readl BookCategory 有一个用户和一个创建来跟踪谁在什么时候做了什么。我已经编辑了问题以反映这一点
    猜你喜欢
    • 2021-11-22
    • 1970-01-01
    • 2018-03-25
    • 2021-12-18
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    相关资源
    最近更新 更多