这是我的模特:
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中有类似的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)
错误:
无法分配“”:未保存“发布”实例 在数据库中。
似乎self.object = form.save(commit=False)
未保存在数据库中,因此未创建帖子ID。
但是当我转向self.object = form.save(commit=True)
时,我仍然再次发生上一次错误。
我知道如何克服这个问题?
答案 0 :(得分:0)
我对你列出的答案也有类似的问题。对我来说,有效的方法是在self.object = form.save(commit=False)
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)
apex.server.process ( "Update Session", {
pageItems: "#P1_ITEM1, P1_ITEM2"
}, {
dataType: "text"
, success: function( pData ) {
//pData should contain VALID or INVALID - alert it
if ( pData === 'INVALID' ) {
// do something here when the result is invalid
alert('Invalid Data: Contact Admin:');
};
}
} );