Вот мои модели:
class Category(models.Model):
name = models.CharField(max_length=255)
slug = models.SlugField(unique=True, max_length=255, blank=True,default=None)
desc = models.TextField(blank=True, null=True )
.....
class Post(models.Model):
title = models.CharField(max_length=255)
content = models.TextField()
categories = models.ManyToManyField(Category, blank=True, through='CatToPost')
.......
class CatToPost(models.Model):
post = models.ForeignKey(Post)
category = models.ForeignKey(Category)
Теперь проблема: я не могу заставить его работать, чтобы сохранить поле «многие ко многим», используя общее представление создания.
Невозможно задать значения для ManyToManyField, указывающего промежуточную модель. Вместо этого используйте менеджер posts.CatToPost.
В SO была аналогичная проблема, которая предлагала переопределить метод form_valid
для ручного создания отношения, но это не сработало для меня.
def form_valid(self, form):
self.object = form.save(commit=False)
for cat in form.cleaned_data['categories']:
cate = CatToPost()
cate.post = self.object
cate.category = cat
cate.save()
return super(AddStoryForm, self).form_valid(form)
Ошибка:
Невозможно назначить "": Экземпляр "Post" не сохраняется в базе данных.
Кажется, self.object = form.save(commit=False)
не сохраняется в БД, поэтому идентификатор сообщения не был создан.
Но когда я поворачиваю self.object = form.save(commit=True)
, у меня снова возникает предыдущая ошибка.
Любая идея, как я могу преодолеть эту проблему?