Как мне поменять виджет на многие многие ModelForm - PullRequest
0 голосов
/ 27 ноября 2010

У меня есть книга и модель категории с множеством отношений через другую модель

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 голосов
/ 27 ноября 2010

Поскольку у вас нет никаких дополнительных полей в BookCategory, вы можете удалить модель и аргумент through='BookCategory'.Затем будет создана неявная модель, и вы сможете использовать виджет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...