这是我的模型:
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)
现在的问题是我无法使用通用创建 View 来保存多对多字段。
Cannot set values on a ManyToManyField which specifies an intermediary model. Use posts.CatToPost's Manager instead.
在 SO 中,有一个类似的 problem 建议重写 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)
错误:
Cannot assign "": "Post" instance isn't saved in the database.
似乎 self.object = form.save(commit=False)
没有保存在数据库中,因此未创建帖子 ID。
但是当我打开 self.object = form.save(commit=True)
时,我仍然再次出现之前的错误。
知道如何克服这个问题吗?
最佳答案
我也遇到了与您列出的答案类似的问题。对我来说,有效的方法是在 self.object = form.save(commit=False)
self.object.save()
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.save()
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)
关于django - 如何在django创建 View 中保存多对多字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31414091/