如何在django创建视图中保存多个到多个字段

时间:2015-07-14 18:06:27

标签: django many-to-many django-generic-views

这是我的模特:

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)时,我仍然再次发生上一次错误。

我知道如何克服这个问题?

1 个答案:

答案 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:');
          };
        }
    } );